java 如何使用www.example.com在Spring中禁用csrfapplication.properties?

lqfhib0f  于 2023-06-04  发布在  Java
关注(0)|答案(3)|浏览(133)

存在以下属性:
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();

    }
}
dauxcl2d

dauxcl2d1#

由于WebSecurityConfigurerAdapter使用命令式方法,您可以注入security.enable-csrf变量的值,并在它为false时禁用CSRF。你是对的,我认为这应该是开箱即用的。

@Configuration
public class AuthConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private UserDetailsService userDetailsService;

    @Value("${security.enable-csrf}")
    private boolean csrfEnabled;

    @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);

       if(!csrfEnabled)
       {
         http.csrf().disable();
       }
    }
}

我所做的是在我的application.yml中将该变量设置为false,以便激活 dev spring配置文件,尽管您也可以为此目的创建一个名为 nosecurity 的配置文件。这大大简化了这个过程:
---应用程序.yml ---

# Production configuration
server:
  port: ${server.web.port}
admin.email: ${admin.email}
#etc
---
spring:
  profiles: dev

security.enable-csrf: false

#other Development configurations

我希望它适合你的需要

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日更新

http.csrf().disable();

对无参数的csrf方法进行了详细的说明。使用重载方法来配置csrf,该方法接受Customizer<CsrfConfigurer<HttpSecurity>>类型的定制器。这一行应该如下所示:

http.csrf(AbstractHttpConfigurer::disable);
ohfgkhjo

ohfgkhjo2#

更新:

看起来在spring-boot 1.x上使用www.example.com禁用CSRF有一个问题application.properties(感谢Eliux打开这个case)。
因此,我对spring-boot 1.5.7的解决方案是通过SecurityConfigclass禁用CSRF(注意,这样我就保留了tomcat ootb的基本身份验证):

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // Note: 
        // Use this to enable the tomcat basic authentication (tomcat popup rather than spring login page)
        // Note that the CSRf token is disabled for all requests (change it as you wish...)
        http.csrf().disable().authorizeRequests().anyRequest().authenticated().and().httpBasic();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        // Add here any custom code you need in order to get the credentials from the user...  
        auth.inMemoryAuthentication()
            .withUser("myUserName")
            .password("myPassword")
            .roles("USER");
    }
}
vfh0ocws

vfh0ocws3#

可以通过spring-security.xml文件中的以下行禁用它:
<security:csrf disabled="true"/>

相关问题