To allow for integration of 3rd party server monitoring solutions, Gitblit needs to expose an extension point for collecting http data.tags/v1.6.0
@@ -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 | |||
@@ -353,4 +362,4 @@ | |||
<url-pattern>/*</url-pattern> | |||
</filter-mapping> | |||
</web-app> | |||
</web-app> |
@@ -36,10 +36,10 @@ public abstract class DaggerFilter implements Filter { | |||
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() { |
@@ -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; | |||
} |
@@ -19,6 +19,7 @@ import java.io.IOException; | |||
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 @@ public abstract class AccessRestrictionFilter extends AuthenticationFilter { | |||
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); | |||
} |
@@ -24,6 +24,7 @@ import java.util.HashMap; | |||
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 @@ public abstract class AuthenticationFilter extends DaggerFilter { | |||
protected IAuthenticationManager authenticationManager; | |||
@Override | |||
protected void inject(ObjectGraph dagger) { | |||
protected void inject(ObjectGraph dagger, FilterConfig filterConfig) { | |||
this.authenticationManager = dagger.get(IAuthenticationManager.class); | |||
} | |||
@@ -19,6 +19,7 @@ import java.io.IOException; | |||
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 @@ public class EnforceAuthenticationFilter extends DaggerFilter { | |||
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); | |||
} |
@@ -17,6 +17,7 @@ package com.gitblit.servlet; | |||
import java.text.MessageFormat; | |||
import javax.servlet.FilterConfig; | |||
import javax.servlet.http.HttpServletRequest; | |||
import com.gitblit.Constants.AccessRestrictionType; | |||
@@ -53,8 +54,8 @@ public class GitFilter extends AccessRestrictionFilter { | |||
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); | |||
} |
@@ -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(); | |||
} | |||
} | |||
} |
@@ -19,6 +19,7 @@ import java.io.IOException; | |||
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 @@ public class RpcFilter extends AuthenticationFilter { | |||
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); | |||
} |
@@ -19,6 +19,7 @@ import java.io.IOException; | |||
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 @@ public class SyndicationFilter extends AuthenticationFilter { | |||
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); |
@@ -185,3 +185,23 @@ public class MyTicketHook extends TicketHook { | |||
} | |||
``` | |||
### 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 { | |||
} | |||
} | |||
``` | |||