次のプロパティが存在します。
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();
}
}
WebSecurityConfigurerAdapter
は命令型のアプローチを使用しているため、security.enable-csrf
変数の値を挿入し、CSRFがfalseの場合は無効にすることができます。あなたは正しい、私はこれが箱から出して動作するはずだと思います。
@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スプリングプロファイルがアクティブになったときに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の新しいバージョンで修正されています。バージョン1.5.2.RELEASE
で問題がありましたが、バージョン 1.5.9.RELEASE (バージョン2以前の最新の安定版)既に修正されており、デフォルトではcsrfが無効になっており、security.enable_csrf: true
で有効にできます。したがって、可能な解決策は、バージョン1.5.9.RELEASE
にアップグレードするだけで、その後、アーキテクチャが大きく異なる可能性があるメジャーバージョンをバージョン2にアップグレードすることです。
更新:
Spring-boot 1.xでapplication.propertiesを使用してCSRFを無効にすると問題があるようです(これを開くためのEliuxのおかげで case )。
だから、Tomcatが埋め込まれたspring-boot 1.5.7の私のソリューションは、SecurityConfigクラスを介して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");
}
}