springsecurity를 확인하세요. get 요청이 정상입니다. post 요청 403 오류입니다.

이 글에서 사용된 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 요청의 성능이 정상이므로 요청과 함께 A 403 오류가 발생했습니다.

CSRF는 잠자는 거인이므로 보호가 필요합니다. springsecurity csrftoken을 사용하지 않는다면 csrf를 비활성화하세요:

http.authorizeRequests().anyRequest().permitAll().and().csrf().disable();

추천

출처blog.csdn.net/weixin_43275277/article/details/132083862