복붙노트

[SPRING] CORS 허용 원점 제한으로 인해 서버가 요청을 거부하지 않습니다 (여전히 브라우저에서 사이트에 액세스 할 수 있음)

SPRING

CORS 허용 원점 제한으로 인해 서버가 요청을 거부하지 않습니다 (여전히 브라우저에서 사이트에 액세스 할 수 있음)

스프링 부트 v1.5.1을 사용하고 있으며 CORS 기원에 대한 제 제한이 작동하지 않습니다.

내 application.properties 파일에는 다음 줄이 있습니다 (ref1 ref2).

endpoints.cors.allowed-origins=http://mydomain.io

내 REST 컨트롤러는 다음과 같습니다.

@RestController
@CrossOrigin
@RequestMapping("/api/car")
public class CarCtrl {
  @Autowired
  private CarService carService;

  @GetMapping
  public Car get() {
    return carService.getLatest();
  }
}

그러나 브라우저를 열고 http : // localhost : 8080 / api / car를 입력해도 여전히 REST 끝점에 액세스 할 수 있습니다.

또한 다음과 같이 주석을 변경하려고 시도했지만 작동하지 않습니다.

@CrossOrigin("${endpoints.cors.allowed-origins}")

내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?

이 게시물과 같은 WebMvcConfigurerAdapter를 사용하고 있지 않습니다. 명시 적으로 출처를 제어하려면이 클래스를 확장해야합니까? 프로퍼티 파일 설정 외에 @CrossOrigin 주석은 허용 된 기원을 제어 할 수 있다고 생각했습니다 (프로그래밍 방식으로 수행해야하는 것과는 대조적으로).

해결법

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

    1.CORS allowed-originins 설정으로 인해 브라우저에서 URL을 직접 열 수 있습니다.

    CORS allowed-originins 설정으로 인해 브라우저에서 URL을 직접 열 수 있습니다.

    브라우저는 XHR 또는 Fetch 또는 jQuery $ .ajax (...)를 사용하는 웹 앱에서 실행되는 JavaScript 코드에만 CORS 제한을 두거나 출처를 교차 요청하는 모든 것을 제한합니다.

    따라서 CORS는 사용자가 URL을 직접 탐색 할 수 없게하는 방법이 아니며 웹 이외의 클라이언트 (예 : 말풍선이나 우편 배달부)가 URL에 액세스하는 것을 막을 수있는 방법이 아닙니다.

  2. ==============================

    2.@CrossOrigin ( "http://mydomain.io")에서 도메인을 문자열로 명시 적으로 지정하면 작동합니다. 나는 이것이 @CrossOrigin ( "$ {endpoints.cors.allowed-origins}")을 사용한다고 생각하지 않는다.

    @CrossOrigin ( "http://mydomain.io")에서 도메인을 문자열로 명시 적으로 지정하면 작동합니다. 나는 이것이 @CrossOrigin ( "$ {endpoints.cors.allowed-origins}")을 사용한다고 생각하지 않는다.

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

    3.나에 관해서는 내 응용 프로그램에 CrossRef Filter를 추가하고 있습니다.

    나에 관해서는 내 응용 프로그램에 CrossRef Filter를 추가하고 있습니다.

     package com.alexfrndz.filter;
    
     import org.slf4j.Logger;
     import org.slf4j.LoggerFactory;
     import org.springframework.stereotype.Component;
     import org.springframework.web.filter.GenericFilterBean;
    
     import javax.servlet.FilterChain;
     import javax.servlet.ServletException;
     import javax.servlet.ServletRequest;
     import javax.servlet.ServletResponse;
     import javax.servlet.http.HttpServletResponse;
     import java.io.IOException;
    
    
     @Component
     public class SimpleCORSFilter extends GenericFilterBean {
    
    /**
     * The Logger for this class.
     */
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    
    @Override
    public void doFilter(ServletRequest req, ServletResponse resp,
                         FilterChain chain) throws IOException, ServletException {
    
        HttpServletResponse response = (HttpServletResponse) resp;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type");
        //response.setHeader("Access-Control-Allow-Credentials", "true");
        chain.doFilter(req, resp);
    
    
      }
    
    }
    
  4. from https://stackoverflow.com/questions/42708660/cors-allowed-origin-restrictions-aren-t-causing-the-server-to-reject-requests-c by cc-by-sa and MIT license