Authentication 带Tyrus websocket的Spring boot 1.3.1导致身份验证异常

Authentication 带Tyrus websocket的Spring boot 1.3.1导致身份验证异常,authentication,websocket,spring-boot,tyrus,Authentication,Websocket,Spring Boot,Tyrus,我们最近从传统的Spring项目迁移到SpringBoot1.3.1。 我们现有的客户使用Tyrus 1.12作为websocket客户机 升级后,我们发现客户端不再连接并抛出AuthenticationException。奇怪的是,自从服务器重新启动后,他们第一次能够连接,很快就会抛出AuthenticationException。 再进一步挖掘,我发现Tyrus最初收到401,随后传递凭证。服务器日志表明了相同的行为,首先分配了ROLE\u ANONYMOUS,然后分配了正确的ROLE\u

我们最近从传统的Spring项目迁移到SpringBoot1.3.1。 我们现有的客户使用Tyrus 1.12作为websocket客户机

升级后,我们发现客户端不再连接并抛出AuthenticationException。奇怪的是,自从服务器重新启动后,他们第一次能够连接,很快就会抛出AuthenticationException。 再进一步挖掘,我发现Tyrus最初收到401,随后传递凭证。服务器日志表明了相同的行为,首先分配了ROLE\u ANONYMOUS,然后分配了正确的ROLE\u GUEST

似乎在协商之后,服务器关闭连接并断开连接

我在Tyrus上使用spring stomp websocket客户端时观察到了相同的行为

  ClientManager container = ClientManager.createClient();
        container.getProperties().put("org.glassfish.tyrus.client.sharedContainer", true);
        container.getProperties().put(ClientProperties.CREDENTIALS, new Credentials("guest", "guest"));
        StandardWebSocketClient webSocketClient = new StandardWebSocketClient(container);
        final CountDownLatch messageLatch = new CountDownLatch(10);
        WebSocketStompClient stompClient = new WebSocketStompClient(webSocketClient);
当在标头中发送凭据时,相同的服务器设置工作正常

stompClient.connect(url,  getHandshakeHeaders("guest", "guest"), handler);
由于凭证不在标题中,因此此将不起作用

ListenableFuture<StompSession>session = stompClient.connect(url, handler, "localhost", "8080");
ListenableFuturesession=stompClient.connect(url,处理程序,“localhost”,“8080”);
我不明白为什么它是一种方式而不是另一种方式

升级到spring boot后,我们的软件不再向后兼容,必须要求所有外部客户端在接收401之前将授权注入头中

有人能帮忙吗


Afaik,您要求的是抢占式身份验证,而这正是您通过“注入”头所做的。我不确定流的哪一部分是您的客户机,您可以在代码中这样做。无论如何,不做抢占式身份验证是很好的(我是Tyrus开发者)——问题似乎更多地出现在服务器端;您需要弄清楚为什么服务器在收到具有正确身份验证头的请求后关闭连接。谢谢。你的解释与我的观察一致。将等待spring boot社区的解决方案