diff --git a/src/main/resources/plugins/gitbucket-notifications-plugin_2.12-1.0.0.jar b/src/main/resources/plugins/gitbucket-notifications-plugin_2.12-1.0.0.jar index a82301a..1ef1dfa 100644 --- a/src/main/resources/plugins/gitbucket-notifications-plugin_2.12-1.0.0.jar +++ b/src/main/resources/plugins/gitbucket-notifications-plugin_2.12-1.0.0.jar Binary files differ diff --git a/src/main/scala/gitbucket/core/servlet/PluginControllerFilter.scala b/src/main/scala/gitbucket/core/servlet/PluginControllerFilter.scala index 442841b..06c6ba5 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,18 +21,25 @@ } override def doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain): Unit = { - val controller = PluginRegistry().getControllers().find { case (_, path) => + val controller = PluginRegistry().getControllers().filter { case (_, path) => val requestUri = request.asInstanceOf[HttpServletRequest].getRequestURI - path.endsWith("/*") && requestUri.startsWith(path.replaceFirst("/\\*$", "/")) + val start = path.replaceFirst("/\\*$", "/") + path.endsWith("/*") && (requestUri + "/").startsWith(start) } - controller.map { case (controller, _) => + 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 = { if(controller.config == null){ controller.init(filterConfig) } controller.doFilter(request, response, chain) - }.getOrElse{ - chain.doFilter(request, response) } } + }