【问题标题】:Enabling CORS in Spring Secondary Servlet在 Spring 二级 Servlet 中启用 CORS
【发布时间】:2016-11-28 07:28:53
【问题描述】:

我正在使用 Spring boot 的 ServletRegistrationBean 注册一个辅助 servlet

@Configuration
public class CxfServletRegister {   
@Bean
public ServletRegistrationBean getODataServletRegistrationBean() {
    ServletRegistrationBean odataServletRegistrationBean = new ServletRegistrationBean(new CXFNonSpringJaxrsServlet(), "/odata.svc/*");
    Map<String, String> initParameters = new HashMap<String, String>();
    initParameters.put("javax.ws.rs.Application", "org.apache.olingo.odata2.core.rest.app.ODataApplication");
    initParameters.put("org.apache.olingo.odata2.service.factory", "com.cce.utils.JPAServiceFactory");
    odataServletRegistrationBean.setInitParameters(initParameters);
    return odataServletRegistrationBean;
}
}

我正在使用 Apache Olingo 构建 OData 应用程序。我希望为我的服务启用 CORS。 如何为此 servlet 启用 CORS?

PS 我已经尝试过 Spring 中的 WebConfigurer bean:入门指南

@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/greeting-javaconfig").allowedOrigins("*");
        }
    };
}

这不起作用,可能是因为这是配置spring web的默认调度器servlet,而不是使用ServletRegistrationBean配置的附加servlet

【问题讨论】:

    标签: spring cors


    【解决方案1】:

    我在这里找到了一种可能的方法: https://spring.io/blog/2015/06/08/cors-support-in-spring-framework

        @Configuration
        public class MyConfiguration {
    
        @Bean
        public FilterRegistrationBean corsFilter() {
            UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            CorsConfiguration config = new CorsConfiguration();
            config.setAllowCredentials(true);
            config.addAllowedOrigin("http://domain1.com");
            config.addAllowedHeader("*");
            config.addAllowedMethod("*");
            source.registerCorsConfiguration("/**", config);
            FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
            bean.setOrder(0);
            return bean;
           }
        }
    

    【讨论】:

    • 这成功了!确切的代码是:FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source), servletRegistrationBean); //servletRegistrationBean 在哪里注册了我想要的 servlet
    猜你喜欢
    • 2020-02-18
    • 2019-05-23
    • 2018-08-02
    • 2018-04-09
    • 2019-01-14
    • 2015-08-20
    • 2015-10-13
    • 2017-06-24
    • 2020-05-29
    相关资源
    最近更新 更多