【问题标题】:WebSocket, authentication in Spring BootWebSocket,Spring Boot 中的身份验证
【发布时间】:2016-12-22 14:15:47
【问题描述】:

我想进行一些聊天,它已经有效,但我无法从 SecurityContextHolder 获取上下文,它始终为空。注释 @PreAuthorize 和 @Secured 也不起作用,因为 SecurityContext 为 nulable。我怎样才能得到这个上下文或主体?在普通控制器中它可以工作,但不适用于 websocket。我想添加关于用户的消息信息,也许还有其他方法?

我的配置:

@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
    }
}

【问题讨论】:

    标签: java spring spring-boot websocket spring-websocket


    【解决方案1】:

    好的,我们不能在 websocket 中使用安全上下文,但是我找到了获取登录用户的方法,我需要更改我的 sendMessage() 方法:

    public OutputMessageDTO sendMessage(SimpMessageHeaderAccessor headerAccessor, MessageDTO message) {
        return new OutputMessageDTO(message, new Date(), headerAccessor.getUser());
    }
    

    【讨论】:

      猜你喜欢
      • 2022-10-12
      • 2021-08-22
      • 2018-02-27
      • 2017-04-12
      • 2018-01-06
      • 2017-07-30
      • 2019-02-13
      • 2018-10-09
      • 2019-04-22
      相关资源
      最近更新 更多