【发布时间】:2019-04-25 03:46:37
【问题描述】:
我的 maven 项目中有一个带有 Spring @RestController 注释的 Web 服务,我想向它添加 CORS 功能。我做了一半,但我得到了我不期望的结果。
症状是我从端口号 1111 向我的服务发送了一条消息,但是我在服务器上启用了 CORS,我认为应该拒绝 1111 端口的配置,因为我有 2222 让我们在配置。我的服务器位于 3333 端口。
如果这有助于缩小范围,我正在使用 5.1.1 版本的 spring-web、spring-webmvc、spring-security-web、spring-security-config 和 spring-context。
这是非常简单的服务;
@RestController
public class MyService implements IMyService {
IMyReqHandler requestHandler;
public MyService (IMyReqHandler requestHandler) {
this.requestHandler = requestHandler;
}
@PostMapping("/dothings")
public void DoThings(@RequestBody MyMessageType msg) {
requestHandler.processRequest(msg);
}
}
我目前的配置如下;
@EnableWebSecurity
public class CORSConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors();
}
@Bean
CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("http://localhost:2222"));
configuration.setAllowedMethods(Arrays.asList("POST"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/dothings", configuration);
return source;
}
}
我已经确认在启动过程中代码被命中。
确切的响应标头是;
HTTP/1.1 200
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: http://localhost:1111
Content-Length: 0
Date: Fri, 23 Nov 2018 12:48:06 GMT
由于我的配置,我预计响应标头中的 1111 为 2222。为什么不是这样?我错过了什么?
编辑:抱歉在这里误导,但事实证明我是通过另一段代码来获取这些标头的……在服务的方法上,我有注释;
@CrossOrigin(value = "http://localhost:1111")
这解释了 1111,但是当我删除该行时,我根本没有添加任何与 CORS 相关的标题。如果我从中删除值,我会得到 CORS 标头,但它们默认为“全部允许”,这不是我想要的。
我应该补充一点,当我删除有问题的代码行时,我看不到任何与 CORS 相关的标题。
为什么我的配置对我的服务调用没有任何影响?我需要一种动态设置值的方法...
【问题讨论】:
-
从副本中:我首先尝试了 Hendy 的答案,但没有用,我收到有关“NoSuchBeanDefinitionException:没有 'org.springframework.security.config.annotation.ObjectPostProcessor> 类型的合格 bean 的异常' 可用的”。如您所见,dur 的答案已经尝试过(请参阅 OP),而 AntonIva 的答案也不起作用,这与 OAuth 有关。这些答案都不起作用。已更新问题以反映这一点。
-
这个问题已经过重大修改。它变成了一篇关于失败的博客文章,所以我将其剥离到我的问题的本质。
标签: java spring spring-security configuration cors