220814

Jongleee·2022년 8월 14일

WIL

목록 보기
4/9

CORS(Cross-Origin Resource Sharing)
-> 교차출처 리소스 공유

cors는 무분별한 http 통신을 제한하기 위해서 같은 출처 혹은 설정된 특정 url에 한해서만 사이트간 HTTP 요청을 허용하는 것

기본 형태는

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;

public class CORSFilter implements Filter {
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with, origin, content-type, accept");
        response.setHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS,DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        chain.doFilter(req, response);
    }

    public void init(FilterConfig arg0) throws ServletException {
    }

    public void destroy() {
    }
}

이런 형태의 필터를 추가하여야 하지만, 스프링 시큐리티를 사용하는 경우에는
WebSecurityConfig에서 configure 클래스에

 .cors().configurationSource(corsConfigurationSource()).and()

를 추가하고


    @Bean
    CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.addAllowedOrigin("http://localhost:8080");
        configuration.setAllowedMethods(Arrays.asList("GET","POST", "OPTIONS", "PUT","DELETE"));
        configuration.setAllowedHeaders(Arrays.asList("*"));
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }
	

위와 같은 형태로 WebSecurityConfig에 빈을 등록하여 사용한다

CORS는 configure에서 HttpSecurity의 cors() 메소드로 설정을 할 수 있으며, 빈으로 등록한 CorsConfigurationSource를 통해 CORS의 속성을 정의해 줄 수 있다. 

0개의 댓글