Spring Security permitAll 的 POST 请求返回 403 错误
Spring Security Spring Boot About 1,373 words现象
Spring Security
在拦截器规则中放行了/api/test
的POST
接口,但请求时得到403
状态码。
原始代码
@Configuration
@EnableWebSecurity
public class SecurityConfiguration {
@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http
.securityMatcher("/api/**")
.authorizeHttpRequests(authorizeHttpRequests -> {
authorizeHttpRequests.requestMatchers("/api/test").permitAll();
authorizeHttpRequests.anyRequest().authenticated();
})
.oauth2ResourceServer((oauth2) -> oauth2.jwt(Customizer.withDefaults()))
.build();
}
}
原因
Spring Security
会拦截CSRF
攻击,对于POST
/PUT
/DELETE
请求会要求提供_crsf
参数,否则会被禁止请求。
禁用 CSRF
CSRF
发生在使用Session-Cookie
模式下的攻击,对于使用Token
/JWT
等不借助于Cookie
的请求可以直接禁用。
@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http
.securityMatcher("/api/**")
.csrf(AbstractHttpConfigurer::disable)
.authorizeHttpRequests(authorizeHttpRequests -> {
authorizeHttpRequests.requestMatchers("/api/test").permitAll();
authorizeHttpRequests.anyRequest().authenticated();
})
.oauth2ResourceServer((oauth2) -> oauth2.jwt(Customizer.withDefaults()))
.build();
}
Views: 928 · Posted: 2024-04-29
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...