springboot 백 엔 드 크로스 필드

2019 단어 수필
프로젝트 에서 현재 개발 은 모두 앞 뒤 가 분리 되 어 있 고 요청 한 크로스 도 메 인 이 발생 할 수 있 습 니 다. 이때 일반적인 해결 방안 은 두 가지 가 있 습 니 다. 하 나 는 nginx 를 바탕 으로 크로스 도 메 인 설정 을 하 는 것 이 고 다른 하 나 는 백 엔 드 가 filter 를 통 해 크로스 도 메 인 을 허용 하 는 것 입 니 다. 다음은 filter 를 통 해 이 루어 진 크로스 도 메 인 코드 를 보 겠 습 니 다.
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsFilter implements Filter {

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

        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
        //        
        response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, request.getHeader("Origin"));
        response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
        //    -  OK
        response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, StringUtil.join(RequestMethod.values()));
        //    -   
        response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, StringUtil.join(new String[]{
                HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS,
                HttpHeaders.CONTENT_TYPE,
                HttpHeaders.ACCEPT,
                HttpHeaders.ORIGIN}));

        /**
         *     ,  3600s         ,      
         */
        response.setHeader(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "3600");

        /**
         * POST @RequestBody            {@link RequestMethod#OPTIONS}           
         *     (    {@link HttpServletRequest#getRequestURI()}       {@link RequestMethod.OPTIONS}     )
         *       {@link HttpStatus#SC_NO_CONTENT}      
         */
        if (RequestMethod.OPTIONS.name().equals(request.getMethod())) {
            response.setStatus(HttpStatus.SC_NO_CONTENT);
        } else {
            chain.doFilter(req, res);
        }

    }

    @Override
    public void init(FilterConfig filterConfig) {
    }

    @Override
    public void destroy() {
    }

}

좋은 웹페이지 즐겨찾기