diff --git a/src/main/scala/gitbucket/core/controller/CompositeScalatraFilter.scala b/src/main/scala/gitbucket/core/controller/CompositeScalatraFilter.scala index 8f27776..d422955 100644 --- a/src/main/scala/gitbucket/core/controller/CompositeScalatraFilter.scala +++ b/src/main/scala/gitbucket/core/controller/CompositeScalatraFilter.scala @@ -33,13 +33,14 @@ chain.doFilter(request, response) } - class MockFilterChain extends FilterChain { - - var continue: Boolean = false - - override def doFilter(request: ServletRequest, response: ServletResponse): Unit = { - continue = true - } - } - } + +class MockFilterChain extends FilterChain { + + var continue: Boolean = false + + override def doFilter(request: ServletRequest, response: ServletResponse): Unit = { + continue = true + } +} + diff --git a/src/main/scala/gitbucket/core/servlet/PluginControllerFilter.scala b/src/main/scala/gitbucket/core/servlet/PluginControllerFilter.scala index f8be024..21a8c78 100644 --- a/src/main/scala/gitbucket/core/servlet/PluginControllerFilter.scala +++ b/src/main/scala/gitbucket/core/servlet/PluginControllerFilter.scala @@ -3,7 +3,7 @@ import javax.servlet._ import javax.servlet.http.HttpServletRequest -import gitbucket.core.controller.ControllerBase +import gitbucket.core.controller.MockFilterChain import gitbucket.core.plugin.PluginRegistry class PluginControllerFilter extends Filter { @@ -21,25 +21,24 @@ } override def doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain): Unit = { - val controller = PluginRegistry().getControllers().filter { case (_, path) => + val controllers = PluginRegistry().getControllers().filter { case (_, path) => val requestUri = request.asInstanceOf[HttpServletRequest].getRequestURI val start = path.replaceFirst("/\\*$", "/") (requestUri + "/").startsWith(start) } - val filterChainWrapper = controller.foldLeft(chain){ case (chain, (controller, _)) => - new FilterChainWrapper(controller, chain) - } - filterChainWrapper.doFilter(request, response) - } - - class FilterChainWrapper(controller: ControllerBase, chain: FilterChain) extends FilterChain { - override def doFilter(request: ServletRequest, response: ServletResponse): Unit = { + controllers.foreach { case (controller, _) => if(controller.config == null){ controller.init(filterConfig) } - controller.doFilter(request, response, chain) + val mockChain = new MockFilterChain() + controller.doFilter(request, response, mockChain) + if(mockChain.continue == false){ + return () + } } + + chain.doFilter(request, response) } }