Spring Boot 애플리케이션에서 CORS(Cross-Origin Resource Sharing)를 설정하여 Access-Control-Allow-Origin: * 헤더를 추가하는 방법을 소개한다. 이렇게 하면 모든 출처(origin)에서 해당 서버에 요청을 보낼 수 있게 된다.
1. **Global CORS Configuration:**
`WebMvcConfigurer`를 구현하여 애플리케이션의 모든 경로에 대해 CORS 설정을 전역적으로 적용할 수 있다.
```java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "DELETE", "HEAD")
.allowedHeaders("*")
.allowCredentials(false);
}
}
```
2. **Controller-Level CORS Configuration:**
특정 컨트롤러나 특정 엔드포인트에 대해서만 CORS 설정을 적용할 수 있다. 이를 위해 `@CrossOrigin` 애너테이션을 사용한다.
내가 주로 사용하는 방법이다. 개발계에서 로컬 테스트 진행할때 CORS 에러가 발생하면, @CrossOrigin(origin="*")를 작성하고, git push 할때 주석 처리하거나 삭제한다.
```java
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class ApiController {
@CrossOrigin(origins = "*")
@GetMapping("/data")
public String getData() {
return "Hello, World!";
}
}
```
3. **Filter-based CORS Configuration:**
만약 특정 조건에 따라 동적으로 CORS 설정을 적용하고 싶다면, 필터를 사용하여 설정할 수 있다.
```java
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.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import java.io.IOException;
@Component
public class CorsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Access-Control-Allow-Origin", "*");
httpResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
httpResponse.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
```
위의 방법 중 하나를 사용하여 CORS 설정을 적용할 수 있다. 일반적으로 전역 설정이 가장 많이 사용되며, 컨트롤러별 설정이나 필터를 사용하는 방법은 특정 요구사항이 있을 때 유용하다.
'학습 > Java_Spring' 카테고리의 다른 글
Mybatis일때 Controller에서의 페이징처리 (0) | 2024.06.24 |
---|---|
자주 사용한 애너테이션 정리 (0) | 2024.06.24 |
Spring Boot에서 하나의 JAR 파일로 빌드하고, 각기 다른 포트로 'admin'과 'user' 컨트롤러를 구분하기 (0) | 2024.06.24 |
openjdk 설치 (0) | 2024.06.21 |
spring.io에서 java 17 이하 버전이 선택되지 않던 이유 (0) | 2023.11.27 |