From f164f2f869800555854fad67a723759d34ba796e Mon Sep 17 00:00:00 2001 From: Johnny Lim Date: Fri, 27 Jul 2018 10:51:35 +0900 Subject: [PATCH] Polish FilterComparator Extracts STEP incrementing into a separate helper class --- .../web/builders/FilterComparator.java | 121 ++++++++---------- 1 file changed, 55 insertions(+), 66 deletions(-) diff --git a/config/src/main/java/org/springframework/security/config/annotation/web/builders/FilterComparator.java b/config/src/main/java/org/springframework/security/config/annotation/web/builders/FilterComparator.java index 7c1fb68c1f..e364f5e2b4 100644 --- a/config/src/main/java/org/springframework/security/config/annotation/web/builders/FilterComparator.java +++ b/config/src/main/java/org/springframework/security/config/annotation/web/builders/FilterComparator.java @@ -56,83 +56,53 @@ import org.springframework.web.filter.CorsFilter; @SuppressWarnings("serial") final class FilterComparator implements Comparator, Serializable { - private static final int STEP = 100; - private Map filterToOrder = new HashMap<>(); + private static final int INITIAL_ORDER = 100; + private static final int ORDER_STEP = 100; + private final Map filterToOrder = new HashMap<>(); FilterComparator() { - int order = 100; - put(ChannelProcessingFilter.class, order); - order += STEP; - put(ConcurrentSessionFilter.class, order); - order += STEP; - put(WebAsyncManagerIntegrationFilter.class, order); - order += STEP; - put(SecurityContextPersistenceFilter.class, order); - order += STEP; - put(HeaderWriterFilter.class, order); - order += STEP; - put(CorsFilter.class, order); - order += STEP; - put(CsrfFilter.class, order); - order += STEP; - put(LogoutFilter.class, order); - order += STEP; + Step order = new Step(INITIAL_ORDER, ORDER_STEP); + put(ChannelProcessingFilter.class, order.next()); + put(ConcurrentSessionFilter.class, order.next()); + put(WebAsyncManagerIntegrationFilter.class, order.next()); + put(SecurityContextPersistenceFilter.class, order.next()); + put(HeaderWriterFilter.class, order.next()); + put(CorsFilter.class, order.next()); + put(CsrfFilter.class, order.next()); + put(LogoutFilter.class, order.next()); filterToOrder.put( "org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestRedirectFilter", - order); - order += STEP; - put(X509AuthenticationFilter.class, order); - order += STEP; - put(AbstractPreAuthenticatedProcessingFilter.class, order); - order += STEP; + order.next()); + put(X509AuthenticationFilter.class, order.next()); + put(AbstractPreAuthenticatedProcessingFilter.class, order.next()); filterToOrder.put("org.springframework.security.cas.web.CasAuthenticationFilter", - order); - order += STEP; + order.next()); filterToOrder.put( "org.springframework.security.oauth2.client.web.OAuth2LoginAuthenticationFilter", - order); - order += STEP; - put(UsernamePasswordAuthenticationFilter.class, order); - order += STEP; - put(ConcurrentSessionFilter.class, order); - order += STEP; + order.next()); + put(UsernamePasswordAuthenticationFilter.class, order.next()); + put(ConcurrentSessionFilter.class, order.next()); filterToOrder.put( - "org.springframework.security.openid.OpenIDAuthenticationFilter", order); - order += STEP; - put(DefaultLoginPageGeneratingFilter.class, order); - order += STEP; - put(DefaultLogoutPageGeneratingFilter.class, order); - order += STEP; - put(ConcurrentSessionFilter.class, order); - order += STEP; - put(DigestAuthenticationFilter.class, order); - order += STEP; + "org.springframework.security.openid.OpenIDAuthenticationFilter", order.next()); + put(DefaultLoginPageGeneratingFilter.class, order.next()); + put(DefaultLogoutPageGeneratingFilter.class, order.next()); + put(ConcurrentSessionFilter.class, order.next()); + put(DigestAuthenticationFilter.class, order.next()); filterToOrder.put( - "org.springframework.security.oauth2.server.resource.web.BearerTokenAuthenticationFilter", order); - order += STEP; - put(BasicAuthenticationFilter.class, order); - order += STEP; - put(RequestCacheAwareFilter.class, order); - order += STEP; - put(SecurityContextHolderAwareRequestFilter.class, order); - order += STEP; - put(JaasApiIntegrationFilter.class, order); - order += STEP; - put(RememberMeAuthenticationFilter.class, order); - order += STEP; - put(AnonymousAuthenticationFilter.class, order); - order += STEP; + "org.springframework.security.oauth2.server.resource.web.BearerTokenAuthenticationFilter", order.next()); + put(BasicAuthenticationFilter.class, order.next()); + put(RequestCacheAwareFilter.class, order.next()); + put(SecurityContextHolderAwareRequestFilter.class, order.next()); + put(JaasApiIntegrationFilter.class, order.next()); + put(RememberMeAuthenticationFilter.class, order.next()); + put(AnonymousAuthenticationFilter.class, order.next()); filterToOrder.put( "org.springframework.security.oauth2.client.web.OAuth2AuthorizationCodeGrantFilter", - order); - order += STEP; - put(SessionManagementFilter.class, order); - order += STEP; - put(ExceptionTranslationFilter.class, order); - order += STEP; - put(FilterSecurityInterceptor.class, order); - order += STEP; - put(SwitchUserFilter.class, order); + order.next()); + put(SessionManagementFilter.class, order.next()); + put(ExceptionTranslationFilter.class, order.next()); + put(FilterSecurityInterceptor.class, order.next()); + put(SwitchUserFilter.class, order.next()); } public int compare(Filter lhs, Filter rhs) { @@ -226,4 +196,23 @@ final class FilterComparator implements Comparator, Serializable { } return null; } + + private static class Step { + + private int value; + private final int stepSize; + + Step(int initialValue, int stepSize) { + this.value = initialValue; + this.stepSize = stepSize; + } + + int next() { + int value = this.value; + this.value += this.stepSize; + return value; + } + + } + }