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;
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<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.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<DispatcherType> filterDispatcherTypes;
private Set<String> filterDispatcherTypes;
public Headers getHeaders() {
return this.headers;
@ -162,11 +160,11 @@ public class SecurityProperties implements SecurityPrerequisite {
this.filterOrder = filterOrder;
}
public EnumSet<DispatcherType> getFilterDispatcherTypes() {
public Set<String> getFilterDispatcherTypes() {
return this.filterDispatcherTypes;
}
public void setFilterDispatcherTypes(EnumSet<DispatcherType> filterDispatcherTypes) {
public void setFilterDispatcherTypes(Set<String> filterDispatcherTypes) {
this.filterDispatcherTypes = filterDispatcherTypes;
}