没有web.xml的Spring Security

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或Spring MVC的情况下使用Spring Security

如果您没有将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或Spring MVC中使用Spring Security

如果您使用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)


Mak*_*das 8

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等添加映射...