Springfox Swagger에서 제공하는 Swagger /v2/api-docs에서 CORS 헤더를 활성화하려면 어떻게 해야 합니까?
프로젝트에 다음 파일이 있습니다.
@Configuration
@Order(Ordered.LOWEST_PRECEDENCE)
public class SwaggerConfig {
@Bean
public Docket apiSwagger2Documentation() { .... }
}
Application.java에는 다음이 있습니다.
@SpringBootApplication
@ComponentScan(basePackages = { ... })
@EnableSwagger2
public class Application {
...
}
Swagger JSON은 다음과 같이 제공됩니다./v2/api-docs그것은 잘 작동합니다.
제가 하고 싶은 것은 해당 엔드포인트에 대해 CORS 헤더를 활성화하는 것입니다.
자체 컨트롤러에 대해 다음과 같이 추가했습니다.@CrossOrigin컨트롤러 클래스에 대해서는 이러한 API에 CORS 헤더가 있으며, 이는 잘 작동합니다.그러나 Swagger JSON URL의 경우 제가 직접 컨트롤러를 작성하지 않았기 때문에 해당 주석을 사용할 수 없습니다.
다음 방법을 추가했습니다.SwaggerConfigSpring Framework의 CORS 지원에 있는 "글로벌 CORS 구성"에 설명된 바와 같이,
@Bean
public WebMvcConfigurer corsConfigurer() {
System.out.println("*** corsConfigurer called");
return new WebMvcConfigurerAdapter() {
@Override public void addCorsMappings(CorsRegistry registry) {
System.out.println("*** addCorsMappings called");
registry.addMapping("/v2/api-docs");
}
};
}
두 가지 인쇄문이 모두 인쇄되므로 메소드가 호출됩니다.하지만 내가 컬로 URL을 부를 때:
curl -H "Origin: foo.com" \
-H "Access-Control-Request-Method: GET" \
-X OPTIONS \
--verbose \
http://localhost:9274/v2/api-docs
CORS 헤더가 응답에 없습니다.(나만의 컨트롤러 방법과 달리, 다음과 같은 주석이 달렸습니다.@CrossOrigin응답에 CORS 헤더가 있습니다.)
저는 springfox-swagger2 버전 2.7.0과 spring-boot-starter-web 1.5.2를 사용하고 있습니다.
Swagger JSON API 엔드포인트에서 CORS 헤더를 활성화하려면 어떻게 해야 합니까?
웹 Mvc 구성이 아닌 일반적인 웹 필터가 필요할 것 같습니다.
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
// Allow anyone and anything access. Probably ok for Swagger spec
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/v2/api-docs", config);
return new CorsFilter(source);
}
@Barath에게 답을 주셔서 감사합니다.해결책은 스프링 문서를 무시하는 것이었는데, 그 코드는 조용히 작동하지 않는 것처럼 보입니다.
(안타깝지만, Spring 내용은 작동할 때 상당히 고급입니다. 예를 들어, 사전 비행 요청에 대한 "Access-Control-Allow-Headers" 응답 헤더는 Java API 방법이 실제로 제공하는 헤더를 기반으로 설정됩니다.)
Spring의 CORS 실행을 무시하고 당신 자신의 실행을 하라.나는 나에게 효과가 있는 코드를 여기에 넣었습니다.
@Component
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Headers", "Foo, Bar, Baz");
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig filterConfig) {}
@Override
public void destroy() {}
}
아무 것이나 추가해야 합니다.@RequestHeader당신이 REST 방법으로 사용한 것.Access-Control-Allow-Headers응답 헤더
언급URL : https://stackoverflow.com/questions/45677048/how-do-i-enable-cors-headers-in-the-swagger-v2-api-docs-offered-by-springfox-sw
'programing' 카테고리의 다른 글
| 교차 도메인 jquery get (0) | 2023.08.13 |
|---|---|
| Oracle DB 버전을 가져오기 위한 쿼리 (0) | 2023.08.13 |
| PowerShell에서 문자열을 변수와 연결하려면 어떻게 해야 합니까? (0) | 2023.08.13 |
| JUNit을 사용한 유닛 테스트에서 스프링이 자동 배선되지 않음 (0) | 2023.08.13 |
| Next.js에서 Redx를 사용하는 것은 안티패턴입니까? (0) | 2023.03.26 |