在我的设置中,我在zuul gatway后面有一个服务,配置了Spring Security;我的客户端是一个向网关执行AJAX请求的简单网站。
我将CrossOrigin-Annotation放在服务控制器的端点上,因此直接向服务传递请求, 将请求指向网关当前最终在我的OPTIONS请求中出现401错误。
似乎授权标头的请求没有达到Spring Security,因为现在不允许使用此标头。
目前,我将WebSecurityConfigurerAdapter扩展为允许所有选项请求。
编辑: 问题:如何将Spring Security配置为不要求对OPTIONS-requests进行身份验证?
EDIT2: 我使用相关代码创建了GIST:
hello.js
,index.html
WebSecurityonfig.java
,SimpleCORSFilter.java
,GatewayApp.java
ContactController.java
EDIT2: 在收集了有关OPTIONS-Preflight和Spring(安全)的更多信息后,似乎问题来自Spring Security。
我们使用承载令牌来授权客户端,因此浏览器会向服务器发送OPTIONS-Preflight请求。服务器由Spring Security保护,Spring Security找不到有效的授权标头,因此返回401-unauthorized
答案 0 :(得分:1)
您必须在CrossOrigin
注释中指定允许的来源。
@CrossOrigin(origins = "http://allowed-domain.com")
这里有一个例子:https://spring.io/blog/2015/06/08/cors-support-in-spring-framework
答案 1 :(得分:0)
我知道我的答案有点偏离主题,但我通常处理这个问题的方法是使用http服务器(如nginx)。此服务器是后端或前端的前端和重定向请求(因此,从浏览器的视图来看,所有服务器都在同一个域中)。