>Java >java지도 시간 >내 Spring Security CORS 필터가 \'Access-Control-Allow-Origin\' 헤더를 추가하지 않는 이유는 무엇입니까?

내 Spring Security CORS 필터가 \'Access-Control-Allow-Origin\' 헤더를 추가하지 않는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-03 13:26:30396검색

  Why is My Spring Security CORS Filter Not Adding the 'Access-Control-Allow-Origin' Header?

Spring Security CORS 필터: 401 오류 문제 해결

기존 프로젝트에 Spring Security를 ​​구현했음에도 불구하고 계속해서 401 "No'가 발생합니다. 서버에서 Access-Control-Allow-Origin' 헤더' 오류가 발생했습니다. 이는 응답에 해당 헤더가 첨부되지 않았기 때문에 발생합니다.

이 문제를 해결하기 위해 로그아웃 필터 이전에 필터 체인에 사용자 정의 필터를 추가하려고 시도했습니다. 그러나 귀하의 요청에는 필터가 적용되지 않는 것 같습니다. 기존 구성과 잠재적인 문제를 살펴보겠습니다.

보안 구성:

보안 구성은 올바르게 구성된 CORS 구성을 활용하고 있습니다. 그러나 컨트롤러의 @CrossOrigin 주석이 이 구성과 충돌하여 예측할 수 없는 동작을 초래할 수 있다는 점에 유의하는 것이 중요합니다.

필터 구현:

필터가 OncePerRequestFilter로 올바르게 구성되어야 합니다. 응답에 CORS 헤더를 추가하는 것을 포함하여 필터 작업에 필요한 방법을 정의합니다.

필터 등록:

필터가 Spring Boot를 통해 등록되고 있으며 이는 확인되었습니다. 로그 항목으로. 필터는 "/*"에 매핑되고 필터 체인의 위치가 적절합니다.

생성된 필터 체인:

생성된 필터 체인 출력은 CORS가 필터가 목록에 없습니다. 이것이 적용되지 않는 이유를 설명할 수 있습니다.

응답 헤더:

서버에서 수신한 전체 응답 헤더를 제공하지 않았습니다. 이러한 헤더를 검사하면 응답에 있는 실제 CORS 헤더에 대한 통찰력을 얻을 수 있습니다.

편집 1:

@Piotr Sołtysiak이 제안한 솔루션이 시도되었지만 문제를 해결하지 못했습니다. 생성된 필터 체인에 CORS 필터가 없고, 401 오류가 지속되었습니다.

해결 방법:

Spring Security 4.1 이상에서는 CORS 지원 구현이 변경되었습니다. 선호되는 접근 방식은 다음 구성을 사용하는 것입니다.

  • WebMvcConfigurerAdapter를 확장하고 addCorsMappings 메서드를 구현하여 허용되는 원본, 메서드 및 헤더를 정의하는 WebConfig 클래스를 만듭니다.
<code class="java">@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedMethods("HEAD", "GET", "PUT", "POST", "DELETE", "PATCH");
    }
}</code>
  • SecurityConfig 클래스에서 CORS를 활성화하고 사용자 정의 CorsConfigurationSource를 정의하세요.
<code class="java">@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors();
    }

    @Bean
    public CorsConfigurationSource corsConfigurationSource() {
        // ... (Define the CORS configuration and return a UrlBasedCorsConfigurationSource)
    }
}</code>

다음과 같은 잘못된 접근 방식을 사용하지 마세요.

  • http.authorizeRequests().antMatchers(HttpMethod.OPTIONS, "/**").permitAll();
  • web.ignoring().antMatchers(HttpMethod.OPTIONS);

이러한 메서드는 더 이상 사용되지 않으며 불완전한 CORS 구현을 제공합니다.

위 내용은 내 Spring Security CORS 필터가 'Access-Control-Allow-Origin' 헤더를 추가하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.