在 Spring 二级 Servlet 中启用 CORS
Posted
技术标签:
【中文标题】在 Spring 二级 Servlet 中启用 CORS【英文标题】:Enabling CORS in Spring Secondary Servlet 【发布时间】: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
【问题讨论】:
【参考方案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以上是关于在 Spring 二级 Servlet 中启用 CORS的主要内容,如果未能解决你的问题,请参考以下文章