2017-02-05 6 views
0

サインイン後、WebSocketは現在のユーザをsession.getPrincipal()(nullを返します)で見つけることができません。ここでスプリングブートWebSocketが現在のユーザ(プリンシパル)を見つけることができません

はWebSocketをのためのJavaコードです:

@Configuration 
@EnableWebSocketMessageBroker 
public class WebSocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer { 
    @Override 
    public void configureMessageBroker(MessageBrokerRegistry config) { 
     config.enableSimpleBroker("/queue", "/topic"); 
     config.setApplicationDestinationPrefixes("/socket"); 
     config.setUserDestinationPrefix("/user"); 
    } 

    @Override 
    public void registerStompEndpoints(StompEndpointRegistry registry) { 
     registry.addEndpoint("/app").withSockJS(); 
    } 
} 

それは春のブートのバグのように思える - 私は1.3.8 RELEASEを使用しています。ページを更新すると、ログインしたユーザーが適切に取得されます。ここ

とされるフロントエンド(サブスクリプション)

ngstomp.subscribeTo('/user/queue/message') 
.callback(function(response) { 
    console.log('Test'); 
}) 
.withBodyInJson() 
.connect(); 

私は、このソリューションを試みた:https://www.javacodegeeks.com/2014/11/spring-boot-based-websocket-application-and-capturing-http-session-id.html

をしかし、それは働いていません。

私を助けてください!

答えて

1

なぜsession.getPricncipal()が必要ですか。 SpringはPrincipalオブジェクトを以下のようにコントローラに自動的に注入します。

@MessageMapping("/message") 
public String processMessageFromClient(@Payload String message, Principal principal) throws Exception { 
     messagingTemplate.convertAndSendToUser(principal.getName(), "/queue/reply", name); 
     return name; 
    } 

参考:Spring Boot Websocket Example

+0

のセッションID後のサインインのセッションIDと異なるサインインが前に、それはそうです。 – KimchiMan

+0

私は、アノテーションを使用しています: 'SendToUser' – KimchiMan

+0

' @MessageMapping( "/メッセージ") @SendToUser パブリック文字列loadMessage(@Payload文字列のメッセージ){ \t戻りメッセージ@; } ' – KimchiMan

関連する問題