存在以下属性:
security.enable-csrf=false
如果我将该属性添加到,则csrf保护仍处于启用状态application.properties。
application.properties
起作用的是以编程方式禁用它。
但是我更喜欢属性配置。为什么它不起作用?
@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(); } }
由于WebSecurityConfigurerAdapter使用强制命令方法,因此您可以注入security.enable- csrf变量的值,并在变量为false时禁用CSRF。没错,我认为这应该可以立即使用。
WebSecurityConfigurerAdapter
security.enable- 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(); } } }
我所做的是,在我激活了 dev spring概要文件时,在application.yml中将该变量设置为false ,尽管您也可以为此目的创建一个名为 nosecurity 的概要文件。它大大简化了此过程:
-– application.yml-
# Production configuration server: port: ${server.web.port} admin.email: ${admin.email} #etc --- spring: profiles: dev security.enable-csrf: false #other Development configurations
我希望它能满足您的需求
根据Spring Boot成员的评论,此问题已在Spring的新版本中解决:我在Spring的版本中拥有此问题,1.5.2.RELEASE但似乎在1.5.9.RELEASE版本(版本2之前的最新稳定版本)中已修复此问题。默认情况下 csrf 是禁用的,可以使用启用security.enable_csrf: true。因此,可能的解决方案可能只是升级到version 1.5.9.RELEASE,然后再将主要版本升级到版本2,而该版本的体系结构可能会大不相同。
1.5.2.RELEASE
security.enable_csrf: true
1.5.9.RELEASE