Spring Security 4.0 XML配置:仅启用CSRF防护,无需认证
解决Spring Security 4.0 XML配置无认证仅CSRF防护的报错问题
你遇到的这个NoSuchBeanDefinitionException是因为配置里的auto-config="true"在搞事情——这个属性会自动帮你配置一系列认证相关的组件(比如认证管理器、登录表单这些),但你明确要的是无需认证,只保留CSRF防护,这就导致Spring Security试图创建认证管理器,却找不到对应的配置,自然报错了。
正确的配置方案
只需要调整你的spring-security.xml,去掉自动配置,同时确保CSRF防护开启(Spring Security 4.0默认是开启的,不过显式声明更稳妥):
<beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.0.xsd"> <!-- 关闭自动配置,仅配置请求拦截和CSRF防护 --> <http> <!-- 允许所有请求访问 --> <intercept-url pattern="/**" access="permitAll"/> <!-- 显式开启CSRF防护(默认已开启,可省略,但声明更清晰) --> <csrf/> </http> </beans:beans>
关键说明
- 去掉
auto-config="true":避免Spring自动创建你不需要的认证相关bean,从根源解决找不到认证管理器的问题。 <csrf/>:显式开启CSRF防护,虽然Spring Security 4.0默认启用,但加上这行能让配置意图更明确,也防止后续版本默认行为变化带来的问题。<intercept-url pattern="/**" access="permitAll"/>:确保所有请求都无需认证即可访问,符合你的需求。
这样配置后,应用就只会启用CSRF防护,不会强制要求认证,也不会再抛出认证管理器找不到的异常了。
内容的提问来源于stack exchange,提问作者nexus
相关产品推荐
相关产品推荐

