gpt4 book ai didi

java - spring boot web socket 中的实时通知

转载 作者:搜寻专家 更新时间:2023-11-01 03:46:20 26 4
gpt4 key购买 nike

在我的应用程序中,我需要向特定用户发送实时通知。我的 WebSocketConfig 类如下,

    @Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
stompEndpointRegistry.addEndpoint("/websocket-example")
.withSockJS();
}

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

大多数时候信息会由服务器端发送。所以我还没有设置应用程序目的地。

在客户端,我订阅了目的地“/topic/user”,

function connect() {
var socket = new SockJS('/websocket-example');
stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
setConnected(true);
console.log('Connected: ' + frame);
stompClient.subscribe('/topic/user', function (greeting) {
// showGreeting(JSON.parse(greeting.body).content);
console.log("Received message through WS");
});
});
}

在我的一个 RestController 中,我有一个方法可以将消息广播到所有连接的客户端。

    @GetMapping("/test")
public void test()
{
template.convertAndSend("/topic/user", "Hurray");
}

直到这一部分一切正常。我收到消息并正在记录到控制台。

现在,如果我只想向特定用户发送通知,我必须使用 template.convertAndSendToUser(String user, String destination, String message)。但我不明白我应该传递给 user 参数什么。我将在何时何地获得用户

我回答了几个与此相关的问题,但我没有清楚地理解这些概念。

最佳答案

在向用户发送任何消息之前,您需要先通过服务器对其进行身份验证。有不同的方法可以做到这一点。 Spring Security 是这里的关键词

https://docs.spring.io/spring-security/site/docs/current/guides/html5/helloworld-boot.html

身份验证完成后,您可以通过调用简单地获取用户名:

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String currentPrincipalName = authentication.getName();

https://www.baeldung.com/get-user-in-spring-security

关于java - spring boot web socket 中的实时通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52245961/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com