💬
[SpringBoot]SpringSecurity6.xで403エラーが発生した時の対応について
やったこと
SpringSecurity の 6.x を利用して認可・認証機能を実装。
発生したエラー
vscode の restClient を利用して signupAPI を叩いたところ、403 エラーが発生。
HTTP/1.1 403
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 0
Date: Tue, 28 Jan 2025 01:59:51 GMT
Connection: close
原因
自動でCSRFの設定がされている。
解決策
CSRFを disabled にする。
securityFilterChain メソッド内でhttp.csrf(AbstractHttpConfigurer::disable);と設定。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(authz -> authz
.requestMatchers("/api/auth/signup").permitAll()
.requestMatchers("/api/auth/login").permitAll()
.anyRequest().authenticated());
http.csrf(AbstractHttpConfigurer::disable);
return http.build();
}
}
詰まったこと
SpringSecurity6.x から大幅に記述方法が変わったらしく、http.csrf を disabled にする方法が中々見つからなかったこと。
参考記事
Spring Boot3 + SpringSecurity6 => 403 Forbidden with "requestMatchers"
Discussion