(Here the token cookie name is Authorization)
if (request.getCookies() != null) {
for (Cookie c : request.getCookies()) {
if (Objects.equals(c.getName(), "Authorization")) {
if (!c.getValue().startsWith("Bearer"))
authorizationHeader = "Bearer " + c.getValue();
}
}
}
并使用此参数代替requestHeader的Authorization参数。
This is the request header
String authorizationHeader = request.getHeader("Authorization");
因此,现在我们可以在Cookie中发送令牌,并由后端进行授权。 不错,但有一个其他的问题。重要的是要知道饼干是如何工作的!(Share cookie between subdomain and domain) nginx配置也应该转发cookie。在本例中,我们从FE(fe.app.com/wss)调用FE域,并在nginx配置中将proxy_pass设置为BE WebSocket位置(backendIp:port/ws) 因此,BE获取cookie并用于授权。 希望对你有帮助。:)
1条答案
按热度按时间wj8zmpe11#
首先,这是我们的解决方案,当然还有更好的,但它的工作。
问题在于:
BE(后端)和FE(前端)在同一个服务器上,但有不同的URL。(fe.app.com和be.app.com)还有一个nginx代理。
FE无法通过WebSocket连接到BE。
故怜曰:前端--〉nginx(be.app.com)--〉后端
主要的问题是授权(承载令牌),当我们想连接wss到Spring Boot 应用程序,因为不能发送自定义头在wss连接请求。
解决方案:
将令牌保存到Cookie并在后端TokenAuthorizationFilter中使用它
并使用此参数代替requestHeader的Authorization参数。
因此,现在我们可以在Cookie中发送令牌,并由后端进行授权。
不错,但有一个其他的问题。重要的是要知道饼干是如何工作的!(Share cookie between subdomain and domain)
nginx配置也应该转发cookie。在本例中,我们从FE(fe.app.com/wss)调用FE域,并在nginx配置中将proxy_pass设置为BE WebSocket位置(backendIp:port/ws)
因此,BE获取cookie并用于授权。
希望对你有帮助。:)