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.
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.