この記事で使用されている SpringBoot バージョン: 2.7.6
springsecurity を導入した後、すべてのリクエストにアクセスできるように構成します。
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().permitAll();
return http.build();
}
}
投稿リクエストを送信すると、応答は 403 になります。
{
"timestamp": "2023-08-03T06:56:00.277+00:00",
"status": 403,
"error": "Forbidden",
"path": "/hi"
}
コンソールには関連するエラー メッセージがなかったので、デバッグをオンにしてトレースして、特定のエラーの詳細を確認しました。
debug: true
trace: true
リクエストが再度開始され、関連するエラー情報がコンソールに出力されましたが、CsrfFilter フィルターによってインターセプトされました。
o.s.security.web.csrf.CsrfFilter : Invalid CSRF token found for http://127.0.0.1:9001/hi
o.s.s.w.access.AccessDeniedHandlerImpl : Responding with 403 status code
o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [{
timestamp=Thu Aug 03 14:56:00 CST 2023, status=403, error=Forbidden, path=/hi}]
クラス パス: ossecurity.web.csrf.CsrfFilter に従って、CsrfFilter コードを確認します。csrf 攻撃を防ぐために、CsrfFilter はリクエストに含まれる csrftoken の正しさを検証します。失敗した場合は、403 で応答します。キー コード: したがって、get
リクエストは正常です。リクエストで 403 エラーが発生しました。
CSRF は眠れる巨人であり、保護が必要です。springsecurity csrftoken を使用しない場合は、csrf を無効にするだけです。
http.authorizeRequests().anyRequest().permitAll().and().csrf().disable();