在我的应用程序中,我需要向特定用户发送实时通知。我的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");
}
}
大多数情况下,信息将由服务器端发送。因此,我没有设置应用程序目标。
在客户端,我订阅目标“/主题/用户”,
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目标,String消息)
。但是我不明白我应该传递给user
参数的内容。我将在哪里以及何时获得user
?
我问了几个与此相关的问题,但我不清楚这些概念。
这个用户名是java的一部分。安全主要接口。每个StompHeaderAccessor或WebSocket会话对象都有一个此原则的实例,您可以从中获取用户名。它不是自动生成的<代码>它必须由服务器为每个会话手动生成
您可以在此处查看有关为每个会话生成唯一id的更多信息。
然后像这样使用:
@MessageMapping('/test')
public void test(SimpMessageHeaderAccessor sha)
{
String userName = sha.session.principal.name;
template.convertAndSend(userName, '/topic/user', "Hurray");
}
在向用户发送任何消息之前,您需要首先通过服务器对其进行身份验证。有不同的方法可以做到这一点。Spring安全性是这里的一个关键短语
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
这是我第一次和docker合作。我有一个laravel web套接字网站(php laravel postgresql),需要放入一个容器。如果我只是执行命令(没有docker): php工匠服务 php artisan WebSocket:服务 然后它成功地工作: Websockets仪表板http://127.0.0.1:8000/laravel-WebSocket 我做了一个docker安装
我们的Spring Security配置是 我们的websocket配置是
问题内容: 我想使用网络套接字在Laravel中实现网络通知。我尝试过推杆。这很容易,但是它是付费的。我还尝试了redis和socket.io,必须为其安装Horizon。我正在运行Windows,但根据我对地平线的了解,无法在Windows上安装它。 所以我对推送通知非常困惑。我正在尝试至少一个星期,但尚未找到任何解决方案。我的前端在angluar 5 / android中,后端在Larav
问题内容: 我试图理解SocketChannels和NIO。我知道如何使用常规套接字,以及如何制作一个简单的每客户端线程服务器(使用常规阻塞套接字)。 所以我的问题是: 什么是SocketChannel? 当使用SocketChannel而不是Socket时,我还能得到什么呢? 通道和缓冲区之间是什么关系? 什么是选择器? 文档中的第一句话是。那是什么意思? 我也阅读了本文档,但是不知何故…… 问
目前,我支持具有以下体系结构的客户机,用于工业制造过程: 我已经在PC上设置了一个WAMP服务器和一个示例网页,我可以在PC上的任何浏览器上看到它作为“本地主机”。我知道如何通过WebView类向Android应用程序添加web浏览器视图。 但是我不知道如何让手机上的浏览器通过TCP连接看到PC上的WAMP服务器。我怎么把这两件事联系起来?
我尝试了我在互联网上找到的每一个解决方案,现在我只是卡住了 这是我的Spring boot App_控制器: 这里是我的corsConfiguration: 以下是我的WebSocketConfiguration: 最后,这里是我连接此WebSocket的函数: 我试图添加@CrossOrigin(origins=“*”)和@CrossOrigins(origins=”)http://localh