[SPRING] CORS 허용 원점 제한으로 인해 서버가 요청을 거부하지 않습니다 (여전히 브라우저에서 사이트에 액세스 할 수 있음)
SPRINGCORS 허용 원점 제한으로 인해 서버가 요청을 거부하지 않습니다 (여전히 브라우저에서 사이트에 액세스 할 수 있음)
스프링 부트 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.CORS allowed-originins 설정으로 인해 브라우저에서 URL을 직접 열 수 있습니다.
CORS allowed-originins 설정으로 인해 브라우저에서 URL을 직접 열 수 있습니다.
브라우저는 XHR 또는 Fetch 또는 jQuery $ .ajax (...)를 사용하는 웹 앱에서 실행되는 JavaScript 코드에만 CORS 제한을 두거나 출처를 교차 요청하는 모든 것을 제한합니다.
따라서 CORS는 사용자가 URL을 직접 탐색 할 수 없게하는 방법이 아니며 웹 이외의 클라이언트 (예 : 말풍선이나 우편 배달부)가 URL에 액세스하는 것을 막을 수있는 방법이 아닙니다.
-
==============================
2.@CrossOrigin ( "http://mydomain.io")에서 도메인을 문자열로 명시 적으로 지정하면 작동합니다. 나는 이것이 @CrossOrigin ( "$ {endpoints.cors.allowed-origins}")을 사용한다고 생각하지 않는다.
@CrossOrigin ( "http://mydomain.io")에서 도메인을 문자열로 명시 적으로 지정하면 작동합니다. 나는 이것이 @CrossOrigin ( "$ {endpoints.cors.allowed-origins}")을 사용한다고 생각하지 않는다.
-
==============================
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); } }
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
'SPRING' 카테고리의 다른 글
[SPRING] Spring-Batch를 사용하여 id-column으로 채워 넣은 csv 줄을 읽는 방법? (0) | 2019.01.07 |
---|---|
[SPRING] UnknownServiceException : 요청 된 알 수없는 서비스 (최대 절전 모드 / 봄) (0) | 2019.01.07 |
[SPRING] HTTP 요청 압축 (0) | 2019.01.06 |
[SPRING] 외부 파일의 속성을 hibernate.cfg.xml에 포함시키는 방법? (0) | 2019.01.06 |
[SPRING] Java EE 및 스프링 부트에서 등록 정보를 핫 로딩하는 방법은 무엇입니까? (0) | 2019.01.06 |