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
实例.我查看了WebApplicationInitializer
s 的层次结构,除非我选择覆盖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 次 |
最近记录: |