Jef*_*eff 20 spring-mvc spring-security servlet-3.0
将Spring Security添加到使用Spring的新WebApplicationInitializer界面而不是web.xml文件的Web应用程序的推荐方法是什么?我正在寻找相当于:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
Run Code Online (Sandbox Code Playgroud)
更新
提供的答案是合理的,但他们都认为我有一个servletContext实例.我查看了WebApplicationInitializers 的层次结构,除非我选择覆盖Spring的初始化方法之一,否则我看不到对servlet上下文的任何访问. AbstractDispatcherServletInitializer.registerServletFilter似乎是明智的选择,但它并不默认为URL模式映射,如果有更好的方法,我不想更改所有内容的过滤器注册.
Bij*_*men 26
这就是我做的方式:
container.addFilter("springSecurityFilterChain", new DelegatingFilterProxy("springSecurityFilterChain"))
.addMappingForUrlPatterns(null, false, "/*");
Run Code Online (Sandbox Code Playgroud)
container是一个实例 ServletContext
Mar*_*son 14
在春季安全参考回答了这个问题和解决方案取决于您是否在使用Spring或Spring MVC结合使用Spring安全.
如果您没有将Spring Security与Spring或Spring MVC一起使用(即您没有现有的WebApplicationInitializer),那么您需要提供以下附加类:
import org.springframework.security.web.context.*;
public class SecurityWebApplicationInitializer
extends AbstractSecurityWebApplicationInitializer {
public SecurityWebApplicationInitializer() {
super(SecurityConfig.class);
}
}
Run Code Online (Sandbox Code Playgroud)
SecurityConfig您的Spring Security Java配置类在哪里?
如果您使用Spring Security with Spring或Spring MVC(即您已经存在WebApplicationInitializer),那么首先需要提供以下附加类:
import org.springframework.security.web.context.*;
public class SecurityWebApplicationInitializer
extends AbstractSecurityWebApplicationInitializer {
}
Run Code Online (Sandbox Code Playgroud)
然后,您需要确保SecurityConfig在此示例中的Spring Security Java配置类在现有的Spring或Spring MVC中声明WebApplicationInitializer.例如:
import org.springframework.web.servlet.support.*;
public class MvcWebApplicationInitializer
extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] {SecurityConfig.class};
}
// ... other overrides ...
}
Run Code Online (Sandbox Code Playgroud)
Dynamic securityFilter = servletContext.addFilter(AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME, DelegatingFilterProxy.class);
securityFilter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), false, "/*");
Run Code Online (Sandbox Code Playgroud)
EnumSet.allOf(DispatcherType.class),以确保您不仅为默认的DispatcherType.REQUEST添加映射,而且为DispatcherType.FORWARD等添加映射...
| 归档时间: |
|
| 查看次数: |
22190 次 |
| 最近记录: |