복붙노트

[SPRING] 프리 플라이트에 대한 응답에 잘못된 HTTP 상태 코드 401이 있습니다.

SPRING

프리 플라이트에 대한 응답에 잘못된 HTTP 상태 코드 401이 있습니다.

각자 모두. 저는 앵귤러 2와 스프링 프레임 워크에 익숙하지 않습니다. 난 권한 헤더 (기본 인증)와 간단한 요청을하려고합니다.

관련성이있는 Spring Boot (1.2.6.RELEASE)를 사용하고 있습니다. 내 CORS 구성은 다음과 같습니다.

@Component
public class SimpleCorsFilter implements Filter {

private final Logger log = LoggerFactory.getLogger(SimpleCorsFilter.class);

public SimpleCorsFilter() {
    log.info("SimpleCORSFilter init");
}

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;

    response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
    response.setHeader("Access-Control-Allow-Credentials", "true");
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me, authorization, x-auth-token");

    chain.doFilter(req, res);
}

@Override
public void init(FilterConfig filterConfig) {
}

@Override
public void destroy() {
}

}

그리고 클라이언트 측에서 다음과 같이 보입니다.

    this.headers.append('Authorization', 'Basic dXNlcjphZG1pbg==');
    return this.http
            .get(`http://localhost:8080/api/login?username=${username}`, {headers : this.headers} )
            .map(response => response.json().data as any);
}

나는 계속 간다.

제발, 내가 무엇을 놓치고 있는지 모르겠다. 이미 많은 게시물을 확인했지만 거기에 갈 수 없었습니다 ...

해결법

  1. ==============================

    1.http 메서드가 OPTIONS 인 경우 필터링 및 상태 200 설정 안 함

    http 메서드가 OPTIONS 인 경우 필터링 및 상태 200 설정 안 함

    if("OPTIONS".equalsIgnoreCase(request.getMethod())) {
        response.setStatus(HttpServletResponse.SC_OK);
    } else {
        chain.doFilter(req, res);
    }
    
  2. ==============================

    2.Spring Boot, Spring Security 및 고객이 2/4 분기와 비슷한 비슷한 상황에 빠지면 여기에 결과를 게시했습니다.

    Spring Boot, Spring Security 및 고객이 2/4 분기와 비슷한 비슷한 상황에 빠지면 여기에 결과를 게시했습니다.

    짧은 응답을 원하는 사람들은 두 가지를 구성해야합니다.

    건배!!!

  3. ==============================

    3.이것은 아주 늦을 수 있었다 그러나 이것은 응답을 찾아낸 장시간 후에 몇몇 그들 문제를, 해결할 수 있었다

    이것은 아주 늦을 수 있었다 그러나 이것은 응답을 찾아낸 장시간 후에 몇몇 그들 문제를, 해결할 수 있었다

    public class SecurityConfig extends WebSecurityConfigurerAdapter
    {
        @Override
        public void configure( WebSecurity web ) throws Exception
        {
            web.ignoring().antMatchers( HttpMethod.OPTIONS, "/**" );
        }
    }
    

    https://stackoverflow.com/a/45830981/3724760을 참조하십시오.

  4. ==============================

    4.봄 보안 가이드와 같은 또 다른 옵션 :

    봄 보안 가이드와 같은 또 다른 옵션 :

    WebSecurityConfigurerAdapter를 확장하는 보안 구성 클래스에서 cors () 구성

      protected void configure(HttpSecurity http) throws Exception {
    
                    http
                            .cors().and().**this will use corsConfigurationSource by** default.
    
    
        so lets define corsConfigurationSource
    
        // other criteria
        }
    
    **so lets define corsConfigurationSource**
    
    @Bean CorsConfigurationSource corsConfigurationSource() { 
    
    CorsConfiguration configuration = new CorsConfiguration(); 
    
    configuration.setAllowedOrigins(Arrays.asList("http://myufrontend.com")); 
    
    configuration.setAllowedMethods(Arrays.asList("GET", "POST")); 
    
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    
    source.registerCorsConfiguration("/**", configuration);
    
    
    
    
    
     }
    
  5. from https://stackoverflow.com/questions/40370022/response-for-preflight-has-invalid-http-status-code-401-spring by cc-by-sa and MIT license