如果只打开一个SockJS (轮询XHR)连接,那么应用程序就能正常工作。当我在一个新窗口中额外打开它时,连接就会周期性地关闭。客户端是SockJS客户机,后端是Spring,启用了MVC和SockJS。
这就是我在服务器端看到的:
2022-03-14 10:40:20.992 DEBUG 752 --- [nio-8311-exec-7] a.w.b.u.d.websocket.WebSocketHandler : connection opened, id: gqgmlrff
2022-03-14 10:40:21.015 DEBUG 752 --- [nio-8311-exec-9] a.w.b.u.d.websocket.WebSocketHandler : Server received message: {"action":"subscribe","payload":{"id":"c910f5d1-9e16-4e30-9559-e0e27973177b","entityType":"PROJEKT"}}15-20秒后
2022-03-14 10:40:40.075 DEBUG 752 --- [ SockJS-10] a.w.b.u.d.websocket.WebSocketHandler : connection closed, sessionId: gqgmlrff, status: CloseStatus[code=3000, reason=Go away!]这在两个窗口的会话中都是无限重复的。看来会话关闭将由后端发起,因为在客户端将执行.onclose()处理程序。
发布于 2022-03-18 08:42:26
原因是,对于这两个应用程序实例,已经生成了不同的auth标记,并且没有更新等式。在更新equals()和hashCode()之后,请求得到正确处理,如下所示。
override fun equals(obj: Any?): Boolean = obj is KeycloakToken &&
principal == obj.principal &&
authorities == obj.authorities &&
isAuthenticated == obj.isAuthenticated
override fun hashCode(): Int {
var code = 31
for (authority in authorities) {
code = code xor authority.hashCode()
}
code = code xor principal.hashCode()
if (this.isAuthenticated) {
code = code xor -37
}
return code
}https://stackoverflow.com/questions/71465758
复制相似问题