make use of new WebElement and Priority annotation

This commit is contained in:
Sebastian Sdorra
2015-02-01 19:52:53 +01:00
parent 79e1e5e972
commit 30b49490a7
19 changed files with 161 additions and 85 deletions

View File

@@ -50,36 +50,9 @@ import java.util.List;
public final class Priorities
{
/** authentication priority */
public static final int AUTHENTICATION = 5000;
/** authorization priority */
public static final int AUTHORIZATION = 6000;
/** base url priority */
public static final int BASEURL = 1000;
/** default priority */
public static final int DEFAULT = 9999;
/** post authentication priority */
public static final int POST_AUTHENTICATION = 5500;
/** pre authorization priority */
public static final int POST_AUTHORIZATION = 6500;
/** post base url priority */
public static final int POST_BASEURL = 1500;
/** pre authentication priority */
public static final int PRE_AUTHENTICATION = 4500;
/** pre authorization priority */
public static final int PRE_AUTHORIZATION = 5500;
/** pre base url priority */
public static final int PRE_BASEURL = 500;
//~--- constructors ---------------------------------------------------------
/**

View File

@@ -0,0 +1,90 @@
/**
* Copyright (c) 2014, Sebastian Sdorra All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. 2. Redistributions in
* binary form must reproduce the above copyright notice, this list of
* conditions and the following disclaimer in the documentation and/or other
* materials provided with the distribution. 3. Neither the name of SCM-Manager;
* nor the names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* http://bitbucket.org/sdorra/scm-manager
*
*/
package sonia.scm.filter;
/**
* Useful constants for filter implementations.
*
* @since 2.0.0
* @author Sebastian Sdorra
*/
public final class Filters
{
/** Field description */
public static final String PATTERN_ALL = "/*";
/** Field description */
public static final String PATTERN_DEBUG = "/debug.html";
/** Field description */
public static final String PATTERN_RESOURCE_REGEX =
"^/(?:resources|api|plugins|index)[\\./].*(?:html|\\.css|\\.js|\\.xml|\\.json|\\.txt)";
/** Field description */
public static final String PATTERN_RESTAPI = "/api/rest/*";
/** authentication priority */
public static final int PRIORITY_AUTHENTICATION = 5000;
/** authorization priority */
public static final int PRIORITY_AUTHORIZATION = 6000;
/** base url priority */
public static final int PRIORITY_BASEURL = 1000;
/** post authentication priority */
public static final int PRIORITY_POST_AUTHENTICATION = 5500;
/** pre authorization priority */
public static final int PRIORITY_POST_AUTHORIZATION = 6500;
/** post base url priority */
public static final int PRIORITY_POST_BASEURL = 1500;
/** pre authentication priority */
public static final int PRIORITY_PRE_AUTHENTICATION = 4500;
/** pre authorization priority */
public static final int PRIORITY_PRE_AUTHORIZATION = 5500;
/** pre base url priority */
public static final int PRIORITY_PRE_BASEURL = 500;
//~--- constructors ---------------------------------------------------------
/**
* Constructs ...
*
*/
private Filters() {}
}

View File

@@ -35,11 +35,10 @@ package sonia.scm.filter;
//~--- non-JDK imports --------------------------------------------------------
import com.google.inject.Singleton;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.Priority;
import sonia.scm.util.WebUtil;
import sonia.scm.web.filter.HttpFilter;
@@ -58,7 +57,8 @@ import javax.servlet.http.HttpServletResponse;
* @author Sebastian Sdorra
* @since 1.15
*/
@Singleton
@Priority(Filters.PRIORITY_PRE_BASEURL)
@WebElement(value = Filters.PATTERN_RESOURCE_REGEX, regex = true)
public class GZipFilter extends HttpFilter
{
@@ -96,8 +96,8 @@ public class GZipFilter extends HttpFilter
*/
@Override
protected void doFilter(HttpServletRequest request,
HttpServletResponse response, FilterChain chain)
throws IOException, ServletException
HttpServletResponse response, FilterChain chain)
throws IOException, ServletException
{
if (WebUtil.isGzipSupported(request))
{

View File

@@ -349,6 +349,7 @@ public class BufferedHttpServletResponse extends HttpServletResponseWrapper
* @param sm
*/
@Override
@SuppressWarnings("deprecation")
public void setStatus(int sc, String sm)
{
this.statusCode = sc;

View File

@@ -54,6 +54,16 @@ import java.util.List;
public class PrioritiesTest
{
/** authentication priority */
public static final int AUTHENTICATION = 5000;
/** post authentication priority */
public static final int POST_AUTHENTICATION = 5500;
/** pre authentication priority */
public static final int PRE_AUTHENTICATION = 4500;
/**
* Constructs ...
*
@@ -69,7 +79,7 @@ public class PrioritiesTest
@Test
public void testGetPriority()
{
assertEquals(Priorities.POST_AUTHENTICATION,
assertEquals(POST_AUTHENTICATION,
Priorities.getPriority(A.class));
assertEquals(Priorities.DEFAULT, Priorities.getPriority(D.class));
}
@@ -97,7 +107,7 @@ public class PrioritiesTest
* @version Enter version here..., 14/12/20
* @author Enter your name here...
*/
@Priority(Priorities.POST_AUTHENTICATION)
@Priority(POST_AUTHENTICATION)
public static class A {}
@@ -108,7 +118,7 @@ public class PrioritiesTest
* @version Enter version here..., 14/12/20
* @author Enter your name here...
*/
@Priority(Priorities.PRE_AUTHENTICATION)
@Priority(PRE_AUTHENTICATION)
public static class B {}
@@ -119,7 +129,7 @@ public class PrioritiesTest
* @version Enter version here..., 14/12/20
* @author Enter your name here...
*/
@Priority(Priorities.AUTHENTICATION)
@Priority(AUTHENTICATION)
public static class C {}

View File

@@ -39,7 +39,10 @@ import com.google.inject.Singleton;
import org.eclipse.jgit.http.server.GitSmartHttpTools;
import sonia.scm.ClientMessages;
import sonia.scm.Priority;
import sonia.scm.config.ScmConfiguration;
import sonia.scm.filter.Filters;
import sonia.scm.filter.WebElement;
import sonia.scm.repository.GitUtil;
import sonia.scm.web.filter.AutoLoginModule;
import sonia.scm.web.filter.BasicAuthenticationFilter;
@@ -57,7 +60,8 @@ import javax.servlet.http.HttpServletResponse;
*
* @author Sebastian Sdorra
*/
@Singleton
@Priority(Filters.PRIORITY_AUTHENTICATION)
@WebElement(value = GitServletModule.PATTERN_GIT)
public class GitBasicAuthenticationFilter extends BasicAuthenticationFilter
{

View File

@@ -52,12 +52,16 @@ import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import sonia.scm.Priority;
import sonia.scm.filter.Filters;
import sonia.scm.filter.WebElement;
/**
*
* @author Sebastian Sdorra
*/
@Singleton
@Priority(Filters.PRIORITY_AUTHORIZATION)
@WebElement(value = GitServletModule.PATTERN_GIT)
public class GitPermissionFilter extends ProviderPermissionFilter
{

View File

@@ -67,8 +67,6 @@ public class GitServletModule extends ServletModule
bind(ScmTransportProtocol.class);
// serlvelts and filters
filter(PATTERN_GIT).through(GitBasicAuthenticationFilter.class);
filter(PATTERN_GIT).through(GitPermissionFilter.class);
serve(PATTERN_GIT).with(ScmGitServlet.class);
}
}

View File

@@ -34,9 +34,11 @@ package sonia.scm.web;
//~--- non-JDK imports --------------------------------------------------------
import com.google.inject.Inject;
import com.google.inject.Singleton;
import sonia.scm.Priority;
import sonia.scm.config.ScmConfiguration;
import sonia.scm.filter.Filters;
import sonia.scm.filter.WebElement;
import sonia.scm.web.filter.AutoLoginModule;
import sonia.scm.web.filter.BasicAuthenticationFilter;
@@ -53,7 +55,8 @@ import javax.servlet.http.HttpServletResponse;
*
* @author Sebastian Sdorra
*/
@Singleton
@Priority(Filters.PRIORITY_AUTHENTICATION)
@WebElement(value = HgServletModule.MAPPING_HG)
public class HgBasicAuthenticationFilter extends BasicAuthenticationFilter
{

View File

@@ -36,9 +36,11 @@ package sonia.scm.web;
//~--- non-JDK imports --------------------------------------------------------
import com.google.inject.Inject;
import com.google.inject.Singleton;
import sonia.scm.Priority;
import sonia.scm.config.ScmConfiguration;
import sonia.scm.filter.Filters;
import sonia.scm.filter.WebElement;
import sonia.scm.repository.RepositoryProvider;
import sonia.scm.web.filter.ProviderPermissionFilter;
@@ -50,7 +52,8 @@ import javax.servlet.http.HttpServletRequest;
*
* @author Sebastian Sdorra
*/
@Singleton
@Priority(Filters.PRIORITY_AUTHORIZATION)
@WebElement(value = HgServletModule.MAPPING_HG)
public class HgPermissionFilter extends ProviderPermissionFilter
{

View File

@@ -74,8 +74,6 @@ public class HgServletModule extends ServletModule
serve(MAPPING_HOOK).with(HgHookCallbackServlet.class);
// register hg cgi servlet
filter(MAPPING_HG).through(HgBasicAuthenticationFilter.class);
filter(MAPPING_HG).through(HgPermissionFilter.class);
serve(MAPPING_HG).with(HgCGIServlet.class);
}
}

View File

@@ -34,9 +34,11 @@ package sonia.scm.web;
//~--- non-JDK imports --------------------------------------------------------
import com.google.inject.Inject;
import com.google.inject.Singleton;
import sonia.scm.Priority;
import sonia.scm.config.ScmConfiguration;
import sonia.scm.filter.Filters;
import sonia.scm.filter.WebElement;
import sonia.scm.repository.SvnUtil;
import sonia.scm.util.HttpUtil;
import sonia.scm.web.filter.AutoLoginModule;
@@ -55,7 +57,8 @@ import javax.servlet.http.HttpServletResponse;
*
* @author Sebastian Sdorra
*/
@Singleton
@Priority(Filters.PRIORITY_AUTHENTICATION)
@WebElement(value = SvnServletModule.PATTERN_SVN)
public class SvnBasicAuthenticationFilter extends BasicAuthenticationFilter
{

View File

@@ -37,10 +37,12 @@ package sonia.scm.web;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import sonia.scm.ClientMessages;
import sonia.scm.Priority;
import sonia.scm.config.ScmConfiguration;
import sonia.scm.filter.Filters;
import sonia.scm.filter.WebElement;
import sonia.scm.repository.RepositoryProvider;
import sonia.scm.repository.ScmSvnErrorCode;
import sonia.scm.repository.SvnUtil;
@@ -59,7 +61,8 @@ import javax.servlet.http.HttpServletResponse;
*
* @author Sebastian Sdorra
*/
@Singleton
@Priority(Filters.PRIORITY_AUTHORIZATION)
@WebElement(value = SvnServletModule.PATTERN_SVN)
public class SvnPermissionFilter extends ProviderPermissionFilter
{

View File

@@ -52,11 +52,6 @@ import sonia.scm.cache.CacheManager;
import sonia.scm.cache.GuavaCacheManager;
import sonia.scm.config.ScmConfiguration;
import sonia.scm.event.ScmEventBus;
import sonia.scm.filter.AdminSecurityFilter;
import sonia.scm.filter.BaseUrlFilter;
import sonia.scm.filter.GZipFilter;
import sonia.scm.filter.MDCFilter;
import sonia.scm.filter.SecurityFilter;
import sonia.scm.group.DefaultGroupManager;
import sonia.scm.group.GroupDAO;
import sonia.scm.group.GroupManager;
@@ -119,10 +114,8 @@ import sonia.scm.util.DebugServlet;
import sonia.scm.util.ScmConfigurationUtil;
import sonia.scm.web.cgi.CGIExecutorFactory;
import sonia.scm.web.cgi.DefaultCGIExecutorFactory;
import sonia.scm.web.filter.AutoLoginFilter;
import sonia.scm.web.filter.LoggingFilter;
import sonia.scm.web.security.AdministrationContext;
import sonia.scm.web.security.ApiBasicAuthenticationFilter;
import sonia.scm.web.security.DefaultAdministrationContext;
//~--- JDK imports ------------------------------------------------------------
@@ -329,21 +322,6 @@ public class ScmServletModule extends JerseyServletModule
filter(PATTERN_ALL).through(LoggingFilter.class);
}
/*
* filter(PATTERN_PAGE,
* PATTERN_STATIC_RESOURCES).through(StaticResourceFilter.class);
*/
filter(PATTERN_ALL).through(BaseUrlFilter.class);
filter(PATTERN_ALL).through(AutoLoginFilter.class);
filterRegex(RESOURCE_REGEX).through(GZipFilter.class);
filter(PATTERN_RESTAPI,
PATTERN_DEBUG).through(ApiBasicAuthenticationFilter.class);
filter(PATTERN_RESTAPI, PATTERN_DEBUG).through(SecurityFilter.class);
filter(PATTERN_CONFIG, PATTERN_ADMIN).through(AdminSecurityFilter.class);
// added mdcs for logging
filter(PATTERN_ALL).through(MDCFilter.class);
// debug servlet
serve(PATTERN_DEBUG).with(DebugServlet.class);

View File

@@ -36,9 +36,9 @@ package sonia.scm.filter;
//~--- non-JDK imports --------------------------------------------------------
import com.google.inject.Inject;
import com.google.inject.Singleton;
import org.apache.shiro.subject.Subject;
import sonia.scm.Priority;
import sonia.scm.config.ScmConfiguration;
import sonia.scm.security.Role;
@@ -47,7 +47,8 @@ import sonia.scm.security.Role;
*
* @author Sebastian Sdorra
*/
@Singleton
@Priority(Filters.PRIORITY_AUTHORIZATION + 1)
@WebElement(value = Filters.PATTERN_RESTAPI, morePatterns = {Filters.PATTERN_DEBUG})
public class AdminSecurityFilter extends SecurityFilter
{
@@ -69,8 +70,6 @@ public class AdminSecurityFilter extends SecurityFilter
* Method description
*
*
* @param securityContext
*
* @param subject
*
* @return

View File

@@ -37,7 +37,6 @@ package sonia.scm.filter;
import com.google.common.annotations.VisibleForTesting;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import sonia.scm.config.ScmConfiguration;
import sonia.scm.util.HttpUtil;
@@ -52,12 +51,14 @@ import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import sonia.scm.Priority;
/**
*
* @author Sebastian Sdorra
*/
@Singleton
@Priority(Filters.PRIORITY_BASEURL)
@WebElement(Filters.PATTERN_ALL)
public class BaseUrlFilter extends HttpFilter
{
@@ -162,6 +163,6 @@ public class BaseUrlFilter extends HttpFilter
//~--- fields ---------------------------------------------------------------
/** Field description */
private ScmConfiguration configuration;
/** scm configuration */
private final ScmConfiguration configuration;
}

View File

@@ -51,12 +51,14 @@ import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import sonia.scm.Priority;
/**
*
* @author Sebastian Sdorra
*/
@Singleton
@Priority(Filters.PRIORITY_POST_AUTHENTICATION)
@WebElement(Filters.PATTERN_ALL)
public class MDCFilter extends HttpFilter
{

View File

@@ -55,12 +55,14 @@ import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import sonia.scm.Priority;
/**
*
* @author Sebastian Sdorra
*/
@Singleton
@Priority(Filters.PRIORITY_AUTHORIZATION)
@WebElement(value = Filters.PATTERN_RESTAPI, morePatterns = {Filters.PATTERN_DEBUG})
public class SecurityFilter extends HttpFilter
{
@@ -171,6 +173,6 @@ public class SecurityFilter extends HttpFilter
//~--- fields ---------------------------------------------------------------
/** Field description */
private ScmConfiguration configuration;
/** scm configuration */
private final ScmConfiguration configuration;
}

View File

@@ -52,12 +52,16 @@ import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import sonia.scm.Priority;
import sonia.scm.filter.Filters;
import sonia.scm.filter.WebElement;
/**
*
* @author Sebastian Sdorra
*/
@Singleton
@Priority(Filters.PRIORITY_AUTHENTICATION)
@WebElement(value = Filters.PATTERN_RESTAPI, morePatterns = {Filters.PATTERN_DEBUG})
public class ApiBasicAuthenticationFilter extends BasicAuthenticationFilter
{