Spring 安全 Java 配置没有 Spring/Spring MVC

Spring Security Java configuration without Spring/Spring MVC

Whosebug 中有一些类似的问题,但其中 none 似乎回答得很清楚。

我正在向不使用 Spring 或 Spring MVC 的现有 Web 应用程序添加 Spring 安全性。我只需要 Spring 安全过滤器,没有别的(没有 MVC 等)。我基于 XML 的配置工作得很好,但 Java 配置却不行。我主要关注 this guide。由于某种原因,Spring 安全过滤器似乎不可用。

所以安全配置如下 - SecurityConfig.java

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser("user").password("password").roles("USER");
    }
}

还有 SecurityWebApplicationInitializer.java

public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
    public SecurityWebApplicationInitializer() {
        super(SecurityConfig.class);
    }
}

我上面做错了什么? SecurityWebApplicationInitializer 如何初始化并加载安全配置?是 servlet 上下文加载的初始化部分——我必须在某处显式定义它吗?

How does the SecurityWebApplicationInitializer gets initialized and load the security config ?

来自指南:

  • 添加一个加载 WebSecurityConfig 的 ContextLoaderListener。

此侦听器负责初始化配置。它应该是这样的:

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

侦听器将加载 applicationContext.xml,其中应包含一个组件扫描,在哪里可以找到您的 bean,例如:

<beans ...>
     <context:component-scan base-package="your.package.here"/>
</beans>

Tomcat 6 不支持 Servlet API 3+,参见 Wikipedia:

First Apache Tomcat release to support the Servlet 2.5, JSP 2.1, and EL 2.1 specifications.

您需要一个带有 Servlet 的容器 API 3+,参见 Spring Security Reference:

The next step is to register the springSecurityFilterChain with the war. This can be done in Java Configuration with Spring’s WebApplicationInitializer support in a Servlet 3.0+ environment.

您可以使用 Tomcat 7(或更高),参见 Wikipedia:

First Apache Tomcat release to support the Servlet 3.0, JSP 2.2, and EL 2.2 specifications.