반응형
의존성 목록
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
의존성이 web, lombok 밖에 없다.
전역 설정
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig {
public static final String[] ALLOWED_ORIGINS = {
"http://localhost:3000",
"http://yunjae.click",
"https://yunjae.click"
};
public static final String[] ALLOWED_METHODS = {
HttpMethod.GET.name(),
HttpMethod.POST.name(),
HttpMethod.PUT.name(),
HttpMethod.DELETE.name(),
HttpMethod.OPTIONS.name()
};
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins(ALLOWED_ORIGINS)
.allowedMethods(ALLOWED_METHODS)
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(3600)
.exposedHeaders("Custom-Response-Header");
}
};
}
}
origin과 method 목록은 따로 빼서 변수로 만들어두었다.
headers나 exposedHeaders도 입맛에 맞게 따로 빼면 될 것 같다.
컨트롤러 레벨 설정
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SampleController {
@CrossOrigin(
origins = {"http://localhost:3000"},
methods = {RequestMethod.GET, RequestMethod.POST},
maxAge = 3600L
)
@GetMapping("/api/sample")
public String getSample() {
return "sample data";
}
}
@CrossOrigin 어노테이션을 이용하면 이용할 수 있다.
특이한게 전역설정 땐 허용 메서드를 String 으로 받는데, @CrossOrigin 어노테이션의 methods는 RequestMethod 타입으로 받는다. 그래서 전역 설정 때도 Httpmethod.GET.name() 말고 통일을 위해 RequestMethod.GET.name() 으로 해도 될 것 같다.
반응형
'TIL ✍️' 카테고리의 다른 글
24/08/19(월) 101번째 TIL : 어노테이션에는 상수만 가능 (0) | 2024.08.30 |
---|---|
24/08/16(금) 100번째 TIL : CORS 커스텀 응답 헤더 가져오기 (0) | 2024.08.19 |
24/08/13(화) 98번째 TIL : Spring boot에서 record로 application.yml 읽기 (0) | 2024.08.13 |
24/08/12(월) 97번째 TIL : Spring cloud gateway에서 최종 라우팅 서비스 URI 가져오기 (0) | 2024.08.12 |
24/08/09(금) 96번째 TIL : Spring Gateway 애플 실리콘 맥 에러 (0) | 2024.08.10 |