0

最近、従来の spring プロジェクトから Spring ブート 1.3.1 に移行しました。既存のクライアントは Tyrus 1.12 を websocket クライアントとして使用しています。

アップグレード後、クライアントが接続されなくなり、AuthenticationException がスローされることがわかりました。奇妙なことに、サーバーの再起動後、AuthenticationException をスローした直後に初めて接続できます。もう少し掘り下げてみると、Tyrus は最初に 401 を受け取り、その後資格情報を渡すことがわかりました。サーバー ログは、最初に ROLE_ANONYMOUS を割り当て、次に正しいロール ROLE_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");

なぜそれが一方の方法で機能し、もう一方の方法では機能しないのか理解できません。

spring-boot にアップグレードした後、私たちのソフトウェアは下位互換性がなくなり、401 を受け取る前にすべての外部クライアントにヘッダーに承認を挿入するように依頼する必要があります。

誰か助けてくれませんか?

スタックトレースを使用した以前の投稿

4

0 に答える 0