存在以下属性:security.enable-csrf=false
但是如果我将属性添加到application.properties
,csrf保护仍然有效。
有效的方法是通过编程禁用它。
但我更喜欢物业配置。为什么会不起作用呢?
@Configuration
public class AuthConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.csrf().disable();
}
}
3条答案
按热度按时间dauxcl2d1#
由于
WebSecurityConfigurerAdapter
使用命令式方法,您可以注入security.enable-csrf
变量的值,并在它为false时禁用CSRF。你是对的,我认为这应该是开箱即用的。我所做的是在我的application.yml中将该变量设置为false,以便激活 dev spring配置文件,尽管您也可以为此目的创建一个名为 nosecurity 的配置文件。这大大简化了这个过程:
---应用程序.yml ---
我希望它适合你的需要
2017年12月17日更新
基于Sping Boot 成员的评论,此问题已在新版本的Spring上得到修复:我在版本
1.5.2.RELEASE
上有它,但似乎在版本1.5.9.RELEASE(版本2之前的最新稳定版本)中,它已经固定,默认情况下csrf是禁用的,它可以通过security.enable_csrf: true
启用。因此,一个可能的解决方案可能只是升级到版本1.5.9.RELEASE
,然后再进行一个主要的版本2,其中架构可能会有很大的不同。2023年6月2日更新
对无参数的
csrf
方法进行了详细的说明。使用重载方法来配置csrf,该方法接受Customizer<CsrfConfigurer<HttpSecurity>>
类型的定制器。这一行应该如下所示:ohfgkhjo2#
更新:
看起来在spring-boot 1.x上使用www.example.com禁用CSRF有一个问题application.properties(感谢Eliux打开这个case)。
因此,我对spring-boot 1.5.7的解决方案是通过SecurityConfigclass禁用CSRF(注意,这样我就保留了tomcat ootb的基本身份验证):
vfh0ocws3#
可以通过spring-security.xml文件中的以下行禁用它:
<security:csrf disabled="true"/>