我正在将应用程序从Spring Boot 1.5迁移到2.0.5。
我在1.5版本中将属性设置为security.enable-csrf=true
,而在Spring Boot的2.0版本中没有该属性。
我阅读了文档,据说在Spring Boot 2.0中:
Java配置中默认启用CSRF保护。
因此默认情况下可以正常启用,但是还创建了一个扩展WebSecurityConfigurerAdapter
的类,这意味着Spring Boot默认安全配置已关闭。这是否也意味着security.enable-csrf
已被禁用?
如果是的话,如何像在1.5版本的应用程序中那样启用它。
我没有得到任何文档来明确确认如何在Spring Boot 2.0中处理security.enable-csrf
属性并声明WebSecurityConfigurerAdapter
。
有人知道吗?另外,我错过阅读的任何文档链接都将对您有很大帮助。
答案 0 :(得分:0)
WebSecurityConfigurerAdapter
是一个抽象类,当您创建扩展WebSecurityConfigurerAdapter
的类时,您将覆盖void configure(HttpSecurity http)
方法。
您可以使用这种方法禁用csrf;
http.csrf().disable();
您可以在csrf()
方法(在HttpSecurity
类中)上方阅读此注释。
添加CSRF支持。使用时默认激活
WebSecurityConfigurerAdapter
的默认构造函数。您可以禁用它...。”
此评论说,当您扩展此类时,WebSecurityConfigurerAdapter
的默认构造函数起作用并且csrf被激活。
答案 1 :(得分:0)
为了与应用程序security.enable-csrf=true
中已设置的属性具有向后兼容性,可以使用以下代码:
@EnableWebSecurity
public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {
@Value("${security.enable-csrf}")
private boolean csrfEnabled;
@Override
protected void configure(HttpSecurity http) throws Exception {
if (!csrfEnabled) {
http.csrf().disable();
}
}
}
您可能会猜到魔法来自
http.csrf().disable();
, 在上面的代码中,您可以通过以下方式控制启用/禁用该功能 在application.properties文件中设置的属性。
更多信息:
有关更多详细信息,您还可以参考spring文档: