From f47449c800011fbd6844774be12d0a381d1bd020 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 2 Dec 2015 10:50:11 +0000 Subject: [PATCH] Remove Servlet API dependency from SecurityProperties A dependency on the Servlet API (the filter's dispatcher types) causes a failure when Spring Security is used in a non-web application. This commit removes the dependency on javax.servlet.DispatcherType in favour of using a Set of Strings. SecurityFilterAutoConfiguration, which is only enabled for web applications, is the responsible for converting each String to a DispatcherType. Closes gh-4505 --- .../SecurityFilterAutoConfiguration.java | 17 ++++++++++++++++- .../security/SecurityProperties.java | 10 ++++------ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/SecurityFilterAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/SecurityFilterAutoConfiguration.java index 3657cad59ba..6675118b595 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/SecurityFilterAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/SecurityFilterAutoConfiguration.java @@ -16,6 +16,12 @@ package org.springframework.boot.autoconfigure.security; +import java.util.EnumSet; +import java.util.HashSet; +import java.util.Set; + +import javax.servlet.DispatcherType; + import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; @@ -54,8 +60,17 @@ public class SecurityFilterAutoConfiguration { DelegatingFilterProxyRegistrationBean registration = new DelegatingFilterProxyRegistrationBean( DEFAULT_FILTER_NAME); registration.setOrder(securityProperties.getFilterOrder()); - registration.setDispatcherTypes(securityProperties.getFilterDispatcherTypes()); + registration.setDispatcherTypes(getDispatcherTypes(securityProperties)); return registration; } + private EnumSet getDispatcherTypes( + SecurityProperties securityProperties) { + Set dispatcherTypes = new HashSet(); + for (String dispatcherType : securityProperties.getFilterDispatcherTypes()) { + dispatcherTypes.add(DispatcherType.valueOf(dispatcherType)); + } + return EnumSet.copyOf(dispatcherTypes); + } + } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/SecurityProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/SecurityProperties.java index 48f766f9554..78dd4e8c143 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/SecurityProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/SecurityProperties.java @@ -18,12 +18,10 @@ package org.springframework.boot.autoconfigure.security; import java.util.ArrayList; import java.util.Arrays; -import java.util.EnumSet; import java.util.List; +import java.util.Set; import java.util.UUID; -import javax.servlet.DispatcherType; - import org.springframework.boot.context.embedded.FilterRegistrationBean; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.core.Ordered; @@ -104,7 +102,7 @@ public class SecurityProperties implements SecurityPrerequisite { /** * Security filter chain dispatcher types. */ - private EnumSet filterDispatcherTypes; + private Set filterDispatcherTypes; public Headers getHeaders() { return this.headers; @@ -162,11 +160,11 @@ public class SecurityProperties implements SecurityPrerequisite { this.filterOrder = filterOrder; } - public EnumSet getFilterDispatcherTypes() { + public Set getFilterDispatcherTypes() { return this.filterDispatcherTypes; } - public void setFilterDispatcherTypes(EnumSet filterDispatcherTypes) { + public void setFilterDispatcherTypes(Set filterDispatcherTypes) { this.filterDispatcherTypes = filterDispatcherTypes; }