在使用Spring的新WebApplicationInitializer
接口而不是web.xml文件的web应用程序中添加Spring Security的推荐方法是什么?我正在寻找的等价物是:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
更新
提供的答案是合理的,但它们都假设我有一个servletContext
实例。我查看了Spring的层次结构,我没有看到任何对WebApplicationInitializer
上下文的访问,除非我选择覆盖Spring的一个初始化器方法。AbstractDispatcherServletInitializer.registerServletFilter
似乎是个明智的选择,但它不会默认使用URL模式映射,而且如果有更好的方法,我不想更改所有内容的过滤器注册。
发布于 2013-01-08 06:42:44
我就是这样做的:
container.addFilter("springSecurityFilterChain", new DelegatingFilterProxy("springSecurityFilterChain"))
.addMappingForUrlPatterns(null, false, "/*");
容器是ServletContext
的一个实例
发布于 2015-06-18 04:58:14
Spring Security Reference回答了这个问题,解决方案取决于您是否将Spring Security与Spring或Spring MVC结合使用。
在没有Spring或Spring MVC的情况下使用Spring Security
如果你在Spring或Spring MVC中使用Spring Security,而不是(也就是说,你没有现有的WebApplicationInitializer
),那么你需要提供以下额外的类:
import org.springframework.security.web.context.*;
public class SecurityWebApplicationInitializer
extends AbstractSecurityWebApplicationInitializer {
public SecurityWebApplicationInitializer() {
super(SecurityConfig.class);
}
}
其中SecurityConfig
是Spring Security Java配置类。
将Spring安全与Spring或Spring MVC结合使用
如果您将Spring Security与Spring或Spring MVC一起使用(即您有一个现有的WebApplicationInitializer
),那么首先您需要提供以下额外的类:
import org.springframework.security.web.context.*;
public class SecurityWebApplicationInitializer
extends AbstractSecurityWebApplicationInitializer {
}
然后,您需要确保在现有的Spring或Spring MVC WebApplicationInitializer
中声明了Spring Security Java配置类,在本例中为SecurityConfig
。例如:
import org.springframework.web.servlet.support.*;
public class MvcWebApplicationInitializer
extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] {SecurityConfig.class};
}
// ... other overrides ...
}
发布于 2013-01-08 19:00:58
Dynamic securityFilter = servletContext.addFilter(AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME, DelegatingFilterProxy.class);
securityFilter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), false, "/*");
EnumSet.allOf(DispatcherType.class),以确保您不仅为默认DispatcherType.REQUEST,而且为DispatcherType.FORWARD,等添加映射。
https://stackoverflow.com/questions/14205140
复制相似问题