스프링 mvc (휴식), 스프링 보안 (4.x) 및 angular2 어플리케이션이 있습니다. 응용 프로그램은 weblogic에 배포되며 SAML 인증을 담당하므로 내 응용 프로그램이 인증 조각 만 사용하고 있습니다. 그렇게하기 위해 우리는 커스텀 요청 헤더를 검증하는 곳에서 커스텀 요청 헤더 인증 필터를 사용하고 있습니다. 이 모든게 잘 작동합니다.angle2를 가진 스프링 보안은 POST, PUT 및 삭제시 403 금지 된 오류 만 제공합니다.
이제 내 서버가 CSRF 토큰 쿠키를 추가하는 CSRF 보호를 구현하고 있으며 angular2는 모든 후속 요청에서 x-xsrf-token과 동일한 쿠키를 전달하기 때문에 즉시 지원합니다.
여기에서 시작하는 모든 문제는 GET 요청이 정상적으로 작동하지만 POST 또는 PUT 또는 DELETE를 수행 할 때 403 오류가 발생합니다. GET과 POST 요청을 비교해 보면 POST 요청에 "Access-Control-Allow-Headers"가 없다는 것을 알았 기 때문에 서버가이 헤더를 공개해야하므로 브라우저가 POST에 X-XSRF-TOKEN을 보낼 수 있다고 생각합니다./PUT 요청.
동일한 헤더가 GET 요청에 있습니다.
누구나 설명 할 수 있습니까? 그렇다면 전체 응용 프로그램에 대해 봄 secuirty 또는 봄 mvc이 헤더를 어떻게 노출시킬 수 있습니까?
그렇다면이 문제의 원인은 무엇입니까?
<filter>
<filter-name>cors</filter-name>
<filter-class>com.elm.mb.rest.filters.CORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cors</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
response.addHeader("Access-Control-Allow-Origin", "*");
if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod())) {
LOG.trace("Sending Header....");
// CORS "pre-flight" request
response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
response.addHeader("Access-Control-Allow-Headers", "Content-Type,X-XSRF-TOKEN");
response.addHeader("Access-Control-Max-Age", "1");
}
filterChain.doFilter(request, response);
}
원본 게시물을 참조하십시오. 설정을 추가했습니다. 또한이 필터는 스프링 보안 필터 이전의 모든 요청을 가로 챌 수 있도록 내 스프링 보안 구성의 첫 번째 필터입니다. – user509755