我有Springboot(v 2.0)应用程序。我在www.example.com中启用了CORSapplication.properties,如下所示。
management.endpoints.web.cors.allowed-origins=http://xxxx.yyyyy.me
management.endpoints.web.cors.allowed-methods=GET,POST
management.endpoints.web.cors.allowed-headers=Authorization,Cache-Control,Content-Type,Accept,X-Requested-With,Access-Control-Allow-Origin,Access-Control-Allow-Headers,Origin
management.endpoints.web.cors.exposed-headers=Access-Control-Expose-Headers,Authorization,Cache-Control,Content-Type,Access-Control-Allow-Origin,Access-Control-Allow-Headers,Origin
另外,我不得不从web配置中删除注解@EnableWebMvc,因为我不想使用Thymleaf模板(所以我使用自己的添加视图控制器,如下所示)。
@Override
public void addViewControllers(ViewControllerRegistry registry)
{
registry.addViewController("/").setViewName("forward:/index.html");
registry.addViewController("/myProfile").setViewName("forward:/index.html");
}
我还在主java类中添加了CORS配置bean,如下所示。
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("http://xxxx.yyyyy.me")
.allowedHeaders("Authorization","Cache-Control","Content-Type","Accept","X-Requested-With","Access-Control-Allow-Origin","Access-Control-Allow-Headers","Origin")
.exposedHeaders("Access-Control-Expose-Headers","Authorization","Cache-Control","Content-Type","Access-Control-Allow-Origin","Access-Control-Allow-Headers","Origin");
}
};
}
另外,在Web安全中,我添加了以下内容:
@Override
protected void configure(HttpSecurity http) throws Exception
{
http.cors();
}
但还是没找到。当我收到http://xxxx.yyyyy.me的请求时,我得到了如下的CORS错误。
Access to XMLHttpRequest at 'https://abcde.com/api/traveller/findTravellers?fromDate=&toDate=&gender=&orderBy=&minAge=&maxAge=&keyword=&languages=&placeObj=&needAccommodation=false&haveAccommodation=false&needCar=false&haveCar=false&lookingFriends=false&withPhotoOnly=false&page=0&totalVisible=7&size=20&totalCount=0' from origin 'http://xxxx.yyyyy.me' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
有办法解决吗?谢谢。
7条答案
按热度按时间o7jaxewo1#
ruyhziif2#
我已经使用了像下面这是工作完美的罚款。请查看我的配置文件。
WebConfig.java
vsdwdz233#
试试下面的实现。对我来说总是有效的。将Access-Control-Allow-Origin中的 * 替换为您的特定来源。
zour9fqk4#
试着加上
hi3rlvi25#
我也有同样的问题。我不明白的是,
management.endpoints.web.cors
属性只是用于Spring Actuator管理端点(例如,/health
)。要实际设置常规服务端点的CORS属性,需要通过编程来设置它们,正如这里的其他答案正确显示的那样。
ct3nt3jp6#
我们在项目中有一个有点细粒度的列表,我们使用如下配置属性配置允许的起源:
注意,
jHipsterProperties
是一个示例,它包含了spring中定义的标准CorsConfiguration
pojo。您可以在自定义配置中自由使用它,然后在配置文件中使用它,如下所示:woobm2wo7#
注册您自己的CORS处理器的变体取决于控制器注册的类型:
@Controller
的默认变量将RequestMappingHandlerMapping
用于寄存器CORS在我看来,你可以尝试扩展
AbstractUrlHandlerMapping
或其他层次结构。为了找到具体的实现,您可以在函数org.springframework.web.servlet.handler.AbstractUrlHandlerMapping#registerHandler
中的debug中停留最近我自己调查了看起来像问题,并使用了这个方法。
我的结果是:
RequestMappingHandlerMapping
initCorsConfiguration
,用于生成配置路径的行为io.github.iruzhnikov.webmvc.servlet.CorsPropWebMvcRegistrations#getRequestMappingHandlerMapping
注册io.github.iruzhnikov.webmvc.servlet.CorsPropWebMvcConfigurationSupport#createRequestMappingHandlerMapping
注册io.github.iruzhnikov.webmvc.servlet.SpringMvcCorsConfigurer
addCorsMappings