2016-12-22 4 views
0

私はチャットをしたい、それはすでに動作しますが、SecurityContextHolderからコンテキストを取得できません。常にnullです。注釈@PreAuthorizeと@Securedは、Nulable SecurityContextのためにも機能しません。この文脈やプリンシパルをどうやって得ることができますか?通常のコントローラでは動作しますが、websocketでは動作しません。私はユーザーに関するメッセージ情報に追加したい、別の方法があるかもしれない?WebSocket、Spring Bootの認証

マイ設定:

@Configuration 
@EnableWebSocketMessageBroker 
@ComponentScan(basePackages = "com.antilamer.controller") 
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { 

    @Override 
    public void configureMessageBroker(MessageBrokerRegistry config) { 
     config.enableSimpleBroker("/topic"); 
     config.setApplicationDestinationPrefixes("/app"); 
    } 

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

コントローラー:

@Controller 
public class ChatController { 
    @MessageMapping("/chat") 
    @SendTo("/topic/message") 
    public OutputMessageDTO sendMessage(MessageDTO message) { 
     return new OutputMessageDTO(message, new Date()); //here i want use my SecurityContext 
    } 
} 

答えて

0

[OK]を、私たちはのWebSocketでセキュリティコンテキストを使用することはできませんが、私はログインしているユーザーを取得する方法を発見し、私は(私のsendMessageを変更する必要があります)方法:

public OutputMessageDTO sendMessage(SimpMessageHeaderAccessor headerAccessor, MessageDTO message) { 
    return new OutputMessageDTO(message, new Date(), headerAccessor.getUser()); 
} 
関連する問題