WebSocket,Spring 引导中的身份验证

WebSocket, authentication in Spring Boot

我想聊天,它已经可以工作了,但我无法从 SecurityContextHolder 获取上下文,它始终为空。由于可为 nulable 的 SecurityContext,注解 @PreAuthorize 和 @Secured 也不起作用。我怎样才能得到这个上下文或主体?在普通控制器中它可以工作,但不能用于 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
    }
}

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

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