diff --git a/src/main/scala/gitbucket/core/servlet/CompositeScalatraFilter.scala b/src/main/scala/gitbucket/core/servlet/CompositeScalatraFilter.scala index 5b3ed8a..c180738 100644 --- a/src/main/scala/gitbucket/core/servlet/CompositeScalatraFilter.scala +++ b/src/main/scala/gitbucket/core/servlet/CompositeScalatraFilter.scala @@ -1,6 +1,7 @@ package gitbucket.core.servlet import javax.servlet._ +import javax.servlet.http.HttpServletRequest import org.scalatra.ScalatraFilter @@ -27,20 +28,27 @@ } override def doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain): Unit = { - filters.foreach { case (filter, path) => - val mockChain = new MockFilterChain() - filter.doFilter(request, response, mockChain) - if(mockChain.continue == false){ - return () + val requestUri = request.asInstanceOf[HttpServletRequest].getRequestURI + + filters + .filter { case (_, path) => + val start = path.replaceFirst("/\\*$", "/") + (requestUri + "/").startsWith(start) } - } + .foreach { case (filter, _) => + val mockChain = new MockFilterChain() + filter.doFilter(request, response, mockChain) + if(mockChain.continue == false){ + return () + } + } + chain.doFilter(request, response) } } class MockFilterChain extends FilterChain { - var continue: Boolean = false override def doFilter(request: ServletRequest, response: ServletResponse): Unit = { @@ -48,3 +56,8 @@ } } +class FilterChainFilter(chain: FilterChain) extends Filter { + override def init(filterConfig: FilterConfig): Unit = () + override def destroy(): Unit = () + override def doFilter(request: ServletRequest, response: ServletResponse, mockChain: FilterChain) = chain.doFilter(request, response) +} diff --git a/src/main/scala/gitbucket/core/servlet/PluginControllerFilter.scala b/src/main/scala/gitbucket/core/servlet/PluginControllerFilter.scala index f51fc5a..1e9713f 100644 --- a/src/main/scala/gitbucket/core/servlet/PluginControllerFilter.scala +++ b/src/main/scala/gitbucket/core/servlet/PluginControllerFilter.scala @@ -3,6 +3,7 @@ import javax.servlet._ import javax.servlet.http.HttpServletRequest +import gitbucket.core.controller.ControllerBase import gitbucket.core.plugin.PluginRegistry class PluginControllerFilter extends Filter { @@ -20,22 +21,25 @@ } override def doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain): Unit = { - val controllers = PluginRegistry().getControllers().filter { case (_, path) => - val requestUri = request.asInstanceOf[HttpServletRequest].getRequestURI - val start = path.replaceFirst("/\\*$", "/") - (requestUri + "/").startsWith(start) - } + val requestUri = request.asInstanceOf[HttpServletRequest].getRequestURI - controllers.foreach { case (controller, _) => - if(controller.config == null){ - controller.init(filterConfig) + PluginRegistry().getControllers() + .filter { case (_, path) => + val start = path.replaceFirst("/\\*$", "/") + (requestUri + "/").startsWith(start) } - val mockChain = new MockFilterChain() - controller.doFilter(request, response, mockChain) - if(mockChain.continue == false){ - return () + .foreach { case (controller, _) => + controller match { + case x: ControllerBase if(x.config == null) => x.init(filterConfig) + case _ => () + } + val mockChain = new MockFilterChain() + controller.doFilter(request, response, mockChain) + + if(mockChain.continue == false){ + return () + } } - } chain.doFilter(request, response) }