如何在Spring Boot 2中处理security.enable-csrf?

时间:2018-09-25 12:23:13

标签: spring-boot spring-security

我正在将应用程序从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

有人知道吗?另外,我错过阅读的任何文档链接都将对您有很大帮助。

2 个答案:

答案 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文档: