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
This commit is contained in:
Andy Wilkinson 2015-12-02 10:50:11 +00:00
parent 2b3fbe9681
commit f47449c800
2 changed files with 20 additions and 7 deletions

View File

@ -16,6 +16,12 @@
package org.springframework.boot.autoconfigure.security; 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.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
@ -54,8 +60,17 @@ public class SecurityFilterAutoConfiguration {
DelegatingFilterProxyRegistrationBean registration = new DelegatingFilterProxyRegistrationBean( DelegatingFilterProxyRegistrationBean registration = new DelegatingFilterProxyRegistrationBean(
DEFAULT_FILTER_NAME); DEFAULT_FILTER_NAME);
registration.setOrder(securityProperties.getFilterOrder()); registration.setOrder(securityProperties.getFilterOrder());
registration.setDispatcherTypes(securityProperties.getFilterDispatcherTypes()); registration.setDispatcherTypes(getDispatcherTypes(securityProperties));
return registration; return registration;
} }
private EnumSet<DispatcherType> getDispatcherTypes(
SecurityProperties securityProperties) {
Set<DispatcherType> dispatcherTypes = new HashSet<DispatcherType>();
for (String dispatcherType : securityProperties.getFilterDispatcherTypes()) {
dispatcherTypes.add(DispatcherType.valueOf(dispatcherType));
}
return EnumSet.copyOf(dispatcherTypes);
}
} }

View File

@ -18,12 +18,10 @@ package org.springframework.boot.autoconfigure.security;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.EnumSet;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.UUID; import java.util.UUID;
import javax.servlet.DispatcherType;
import org.springframework.boot.context.embedded.FilterRegistrationBean; import org.springframework.boot.context.embedded.FilterRegistrationBean;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.core.Ordered; import org.springframework.core.Ordered;
@ -104,7 +102,7 @@ public class SecurityProperties implements SecurityPrerequisite {
/** /**
* Security filter chain dispatcher types. * Security filter chain dispatcher types.
*/ */
private EnumSet<DispatcherType> filterDispatcherTypes; private Set<String> filterDispatcherTypes;
public Headers getHeaders() { public Headers getHeaders() {
return this.headers; return this.headers;
@ -162,11 +160,11 @@ public class SecurityProperties implements SecurityPrerequisite {
this.filterOrder = filterOrder; this.filterOrder = filterOrder;
} }
public EnumSet<DispatcherType> getFilterDispatcherTypes() { public Set<String> getFilterDispatcherTypes() {
return this.filterDispatcherTypes; return this.filterDispatcherTypes;
} }
public void setFilterDispatcherTypes(EnumSet<DispatcherType> filterDispatcherTypes) { public void setFilterDispatcherTypes(Set<String> filterDispatcherTypes) {
this.filterDispatcherTypes = filterDispatcherTypes; this.filterDispatcherTypes = filterDispatcherTypes;
} }