땅지원
땅지원's Personal blog
땅지원
전체 방문자
오늘
어제
  • 전체 (353)
    • Frontend (2)
      • React (2)
    • Backend (90)
      • Java (16)
      • Python (19)
      • Spring (23)
      • Database (21)
      • Troubleshooting (8)
    • DevOps (27)
      • ELK (13)
    • CS (40)
    • OS (2)
      • Linux (2)
    • Algorithm (95)
      • concept (18)
      • Algorithm Problem (77)
    • 인공지능 (25)
      • 인공지능 (12)
      • 연구노트 (13)
    • 수업정리 (35)
      • 임베디드 시스템 (10)
      • 데이터통신 (17)
      • Linux (8)
    • 한국정보통신학회 (5)
      • 학술대회 (4)
      • 논문지 (1)
    • 수상기록 (8)
      • 수상기록 (6)
      • 특허 (2)
    • 삼성 청년 SW 아카데미 (6)
    • 42seoul (12)
    • Toy project (3)
    • 땅's 낙서장 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 20.11.6 BB21플러스 온라인 학술대회
  • 20.10.30 한국정보통신학회 온라인 학술대회

인기 글

태그

  • ㅗ
  • I
  • 이것이 리눅스다 with Rocky Linux9
  • D
  • E

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
땅지원

땅지원's Personal blog

Backend/Spring

[SpringBoot] CORS 설정

2023. 1. 24. 22:56

CORS(Cross Origin Resource Sharing)

Origin 이 다른 경우에 자원을 주고 받을 수 있도록 하는 http 통신 프로토콜

요청하는 클라이언트와 응답해야하는 서버의 Origin 이 다른 경우 CSRF(Cross-Site Request Forgery)나

 XSS(Cross-Site Scripting) 같은 공격에 취약하기 때문에, 특정 Origin 과 request method 에만 요청을 허용하기 위함이다.

 

CORS 정책 설정은 Spring MVC 와 Spring Security 두 프레임워크에서 모두 설정이 가능하다.

 

둘 중 하나만 설정해도 충분한데, 가장 중요한 점은 Spring Security 가 가장 앞단에서 사용자 요청을 처리하기 때문에, Spring Security 에서 cors 를 활성화 시키자

 

 

1. Spring MVC

Spring MVC에서 CORS를 적용하는 방법은 크게 총 2가지로 나뉜다.

  1. 부분적으로 컨트롤러에서 CORS를 설정하는 방법 (Annotation based)
  2. 전역적으로 Spring MVC 설정에서 CORS를 설정하는 방법

 

Handler 메소드에 @CrossOrigin 애노테이션을 붙이는 방법
@RestController
@RequestMapping("/account")
public class AccountController {
 
    @CrossOrigin
    @RequestMapping(method = RequestMethod.GET, path = "/{id}")
    public Account retrieve(@PathVariable Long id) {
        // ...
    }
 
    @RequestMapping(method = RequestMethod.DELETE, path = "/{id}")
    public void remove(@PathVariable Long id) {
        // ...
    }
}

 

JavaConfig를 통해 CORS 전역 설정(WebConfiguration.java)
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**");
                .allowedOrigins("http://www.example.com")
                .allowedMethods("*")
                .allowCredentials(false)
                .maxAge(3000);
    }
}

 

2. Spring Security

Spring Security에서 CORS를 다루는 가장 확실하고 쉬운 방법은 CorsFilter를 사용하는 것이다. 사용자는 다음과 같이 CorsConfigurationSource를 제공하여 CorsFilter를 Spring Security와 통합 할 수 있다.

Spring Security 사용시 CORS에 걸리지 않으려면 Authentication Filter 인증 보다 앞단계의 필터/인터셉터에서 path 검증로직이 일어나야만 한다.

 

The CORS configuration in Spring Security
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
	
    @Bean
    public CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();

        configuration.addAllowedOrigin("http://localhost:3000");
        configuration.addAllowedOrigin("https://test.ssafy.io:3000");
        configuration.addAllowedOrigin("https://test.ssafy.io");
        configuration.addAllowedHeader("*");
        configuration.addAllowedMethod("*");
        configuration.setAllowCredentials(true);

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);

        return source;
    }
}

 

 

 

'Backend > Spring' 카테고리의 다른 글

프로젝트 회고(경매중) + 질문 리스트  (1) 2023.02.20
[Spring Security] SecurityConfig 작성 (version. Jiwon)  (0) 2023.01.25
[SpringBoot] 빌드 및 배포  (0) 2022.12.27
[SpringBoot] 구동 속도 향상 시키기  (0) 2022.12.27
[IntelliJ] IntelliJ Lombok 설치 및 설정  (0) 2022.12.27
    'Backend/Spring' 카테고리의 다른 글
    • 프로젝트 회고(경매중) + 질문 리스트
    • [Spring Security] SecurityConfig 작성 (version. Jiwon)
    • [SpringBoot] 빌드 및 배포
    • [SpringBoot] 구동 속도 향상 시키기
    땅지원
    땅지원
    신입 개발자의 우당탕탕 기술 블로그

    티스토리툴바