gpt4 book ai didi

java - 通过 spring websocket、sockJs 和 STOMP 向经过身份验证的用户发送通知

转载 作者:行者123 更新时间:2023-11-30 06:09:30 29 4
gpt4 key购买 nike

我有一个基于 JWT 的应用程序,由 Spring Security 保护。一切都很安全并且工作正常。此外,应用程序公开一个 websocket url (localhost:8080/ws),用户可以订阅该 URL (“/realtime”) 并接收通用更新,即每个经过身份验证或未经身份验证的用户都将收到更新。

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/realtime");

config.setApplicationDestinationPrefixes("/app");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws")
.setAllowedOrigins("*")
.withSockJS();

}

}

客户端代码:

//private _channel = "/realtime";
constructor(){
this.connect();
}
public connect() : void {
let self = this;
var token = localStorage.getItem("token");//get jwt from storage
self._webSocketUrl = "http://localhost:8080/ws";
//let webSocket = new WebSocket(this._webSocketUrl);//without sockjs
let webSocket = new SockJS(this._webSocketUrl);//with sockjs
self._stompClient = Stomp.over(webSocket);
self._stompClient.connect({}, function (frame) {
self._stompClient.subscribe("/realtime", function (stompResponse) {

console.log("got data from server");
self._stompSubject.next(stompResponse);
});
});
}

所有这些都运行良好。现在,每当服务器上发生他们感兴趣的事情时,我需要向特定的经过身份验证的用户发送通知。所以,我从来没有收到过用户的任何消息。每当经过身份验证的用户需要发送请求时,他都可以通过 Rest 端点(而不是 Websocket)来执行此操作。因此,一旦他登录,连接到/ws 端点并订阅“/realtime 目的地,他就完成了。现在,我的工作是在特定用户可用时向他们发送通知。这是一种方式(服务器到客户端)通过 websocket 进行通信。这将来会改变。

那么,每当我有需要经过身份验证的用户(例如 user123@gmail.com)的信息时,如何通过 websocket 向他发送通知?

我浏览了 stackoverflow 上的许多链接和问题,但找不到任何有效的内容。

最佳答案

我能够通过执行以下操作来使其正常工作:

  1. 例如,在订阅中使用身份验证主体

    self._stompClient.subscribe("/realtime/" + userName, function (stompResponse) {

    console.log("got data from server");
    self._stompSubject.next(stompResponse);
    });

    });

  2. 发送给用户为

    simpMessagingTemplate.convertAndSendToUser(userName, "/realtime/", message);

请注意,此解决方案可能无法提供适当的安全控制。请查看https://docs.spring.io/spring-security/site/docs/current/reference/html/websocket.html

关于java - 通过 spring websocket、sockJs 和 STOMP 向经过身份验证的用户发送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50580103/

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