【问题标题】:Swagger + spring-boot = CORS issue?Swagger + spring-boot = CORS 问题?
【发布时间】:2015-03-29 16:24:15
【问题描述】:

我正在尝试在我的项目中设置 swagger。

我有以下 SwaggerConfiguration 类:

@EnableSwagger
@Configuration
@ComponentScan(basePackages = {"my.package"})
public class SwaggerConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler(
                SwaggerSpringMvcUi.WEB_JAR_RESOURCE_PATTERNS)
                .addResourceLocations(
                        SwaggerSpringMvcUi.WEB_JAR_RESOURCE_LOCATION)
                .setCachePeriod(0);
    }

    @Bean
    public InternalResourceViewResolver getInternalResourceViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix(SwaggerSpringMvcUi.WEB_JAR_VIEW_RESOLVER_PREFIX);
        resolver.setSuffix(SwaggerSpringMvcUi.WEB_JAR_VIEW_RESOLVER_SUFFIX);
        return resolver;
    }

    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

}

很遗憾,我收到 无法从服务器读取。它可能没有适当的访问控制来源设置。

所以经过快速研究,我发现我需要添加 CORSFilter 来克服这个问题:

@Component
public class SimpleCORSFilter 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-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
        chain.doFilter(req, res);
    }

    public void init(FilterConfig filterConfig) {}

    public void destroy() {}

}

我检查了 CURL - 标头已正确修改,但 Swagger 仍然无法正常工作(与之前的错误消息相同)。

有什么想法吗?

【问题讨论】:

  • 您使用 curl 测试哪个 URL?您是否尝试在修改标题后清除浏览器的缓存?您没有任何PUT 操作吗?
  • 我找到了一个解决方案 - 事实证明,我的 gradle 构建中缺少以下条目:runtime 'org.apache.tomcat.embed:tomcat-embed-jasper'
  • 您可能希望为未来的用户提供该问题的官方答案并接受它。

标签: spring-boot swagger swagger-ui


【解决方案1】:

请查看最新发布的 Spring Boot 1.3.M1: https://spring.io/blog/2015/06/12/spring-boot-1-3-0-m1-available-now

最近发布的 Spring Framework 4.2 RC1 为 CORS 提供了开箱即用的一流支持,与典型的基于过滤器的解决方案相比,为您提供了一种更简单、更强大的配置方式。

...更多信息:https://spring.io/blog/2015/06/08/cors-support-in-spring-framework

【讨论】:

    猜你喜欢
    • 2021-04-11
    • 2021-12-31
    • 2016-07-09
    • 2018-07-12
    • 2020-09-08
    • 1970-01-01
    • 2019-05-17
    • 2017-09-09
    相关资源
    最近更新 更多