src/main/java/WEB-INF/web.xml
@@ -214,6 +214,15 @@ <url-pattern>/robots.txt</url-pattern> </servlet-mapping> <filter> <filter-name>ProxyFilter</filter-name> <filter-class>com.gitblit.servlet.ProxyFilter</filter-class> </filter> <filter-mapping> <filter-name>ProxyFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Git Access Restriction Filter <url-pattern> MUST match: * GitServlet src/main/java/com/gitblit/dagger/DaggerFilter.java
@@ -36,10 +36,10 @@ public final void init(FilterConfig filterConfig) throws ServletException { ServletContext context = filterConfig.getServletContext(); ObjectGraph objectGraph = (ObjectGraph) context.getAttribute(DaggerContext.INJECTOR_NAME); inject(objectGraph); inject(objectGraph, filterConfig); } protected abstract void inject(ObjectGraph dagger); protected abstract void inject(ObjectGraph dagger, FilterConfig filterConfig) throws ServletException; @Override public void destroy() { src/main/java/com/gitblit/extensions/HttpRequestFilter.java
New file @@ -0,0 +1,49 @@ /* * Copyright 2014 gitblit.com. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.gitblit.extensions; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import ro.fortsoft.pf4j.ExtensionPoint; /** * Extension point to intercept HTTP requests passing through the server. * * @author David Ostrovsky * @since 1.6.0 * */ public abstract class HttpRequestFilter implements Filter, ExtensionPoint { @Override public void init(FilterConfig config) throws ServletException { } @Override public void destroy() { } @Override public abstract void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException; } src/main/java/com/gitblit/servlet/AccessRestrictionFilter.java
@@ -19,6 +19,7 @@ import java.text.MessageFormat; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; @@ -54,8 +55,8 @@ protected IRepositoryManager repositoryManager; @Override protected void inject(ObjectGraph dagger) { super.inject(dagger); protected void inject(ObjectGraph dagger, FilterConfig filterConfig) { super.inject(dagger, filterConfig); this.runtimeManager = dagger.get(IRuntimeManager.class); this.repositoryManager = dagger.get(IRepositoryManager.class); } src/main/java/com/gitblit/servlet/AuthenticationFilter.java
@@ -24,6 +24,7 @@ import java.util.Map; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; @@ -64,7 +65,7 @@ protected IAuthenticationManager authenticationManager; @Override protected void inject(ObjectGraph dagger) { protected void inject(ObjectGraph dagger, FilterConfig filterConfig) { this.authenticationManager = dagger.get(IAuthenticationManager.class); } src/main/java/com/gitblit/servlet/EnforceAuthenticationFilter.java
@@ -19,6 +19,7 @@ import java.text.MessageFormat; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; @@ -53,7 +54,7 @@ private IAuthenticationManager authenticationManager; @Override protected void inject(ObjectGraph dagger) { protected void inject(ObjectGraph dagger, FilterConfig filterConfig) { this.settings = dagger.get(IStoredSettings.class); this.authenticationManager = dagger.get(IAuthenticationManager.class); } src/main/java/com/gitblit/servlet/GitFilter.java
@@ -17,6 +17,7 @@ import java.text.MessageFormat; import javax.servlet.FilterConfig; import javax.servlet.http.HttpServletRequest; import com.gitblit.Constants.AccessRestrictionType; @@ -53,8 +54,8 @@ private IFederationManager federationManager; @Override protected void inject(ObjectGraph dagger) { super.inject(dagger); protected void inject(ObjectGraph dagger, FilterConfig filterConfig) { super.inject(dagger, filterConfig); this.settings = dagger.get(IStoredSettings.class); this.federationManager = dagger.get(IFederationManager.class); } src/main/java/com/gitblit/servlet/ProxyFilter.java
New file @@ -0,0 +1,76 @@ /* * Copyright 2014 gitblit.com. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.gitblit.servlet; import java.io.IOException; import java.util.Iterator; import java.util.List; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import com.gitblit.dagger.DaggerFilter; import com.gitblit.extensions.HttpRequestFilter; import com.gitblit.manager.IPluginManager; import dagger.ObjectGraph; /** * A request filter than allows regsitered extension request filters to access * request data. The intended purpose is for server monitoring plugins. * * @author David Ostrovsky * @since 1.6.0 */ public class ProxyFilter extends DaggerFilter { private List<HttpRequestFilter> filters; @Override protected void inject(ObjectGraph dagger, FilterConfig filterConfig) throws ServletException { IPluginManager pluginManager = dagger.get(IPluginManager.class); filters = pluginManager.getExtensions(HttpRequestFilter.class); for (HttpRequestFilter f : filters) { f.init(filterConfig); } } @Override public void doFilter(ServletRequest req, ServletResponse res, final FilterChain last) throws IOException, ServletException { final Iterator<HttpRequestFilter> itr = filters.iterator(); new FilterChain() { @Override public void doFilter(ServletRequest req, ServletResponse res) throws IOException, ServletException { if (itr.hasNext()) { itr.next().doFilter(req, res, this); } else { last.doFilter(req, res); } } }.doFilter(req, res); } @Override public void destroy() { for (HttpRequestFilter f : filters) { f.destroy(); } } } src/main/java/com/gitblit/servlet/RpcFilter.java
@@ -19,6 +19,7 @@ import java.text.MessageFormat; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; @@ -53,8 +54,8 @@ private IRuntimeManager runtimeManager; @Override protected void inject(ObjectGraph dagger) { super.inject(dagger); protected void inject(ObjectGraph dagger, FilterConfig filterConfig) { super.inject(dagger, filterConfig); this.settings = dagger.get(IStoredSettings.class); this.runtimeManager = dagger.get(IRuntimeManager.class); } src/main/java/com/gitblit/servlet/SyndicationFilter.java
@@ -19,6 +19,7 @@ import java.text.MessageFormat; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; @@ -50,8 +51,8 @@ private IProjectManager projectManager; @Override protected void inject(ObjectGraph dagger) { super.inject(dagger); protected void inject(ObjectGraph dagger, FilterConfig filterConfig) { super.inject(dagger, filterConfig); this.runtimeManager = dagger.get(IRuntimeManager.class); this.repositoryManager = dagger.get(IRepositoryManager.class); this.projectManager = dagger.get(IProjectManager.class); src/site/plugins_extensions.mkd
@@ -185,3 +185,23 @@ } ``` ### Request Filter *SINCE 1.6.0* You can provide your own custom request filter by subclassing the *HttpRequestFilter* class. ```java import com.gitblit.extensions.HttpRequestFilter; import ro.fortsoft.pf4j.Extension; @Extension public class MyRequestFilter extends HttpRequestFilter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { } } ```