当前位置: 代码迷 >> java >> Spring Stomp SimpUserRegistry 匿名用户
  详细解决方案

Spring Stomp SimpUserRegistry 匿名用户

热度:109   发布时间:2023-07-26 13:56:42.0

SimpUserRegistry允许您检索所有经过身份验证的 Stomp 会话的详细信息,是否有任何此类可以让我遍历匿名用户会话?

就像在他的回答中描述的一样,只有非匿名用户才会被添加到SimpUserRegistry

但是,如果您真的想添加匿名用户,您只需要对 DefaultHandshakeHandler 类进行子类化,并像中所述那样覆盖确定用户方法。 这也应该适用于您当前使用 Spring Boot 2.1.3.RELEASE 时使用的 5.1.5.Release:

在某些情况下,即使用户尚未经过正式身份验证,为 WebSocket 会话分配身份也可能很有用。 例如,移动应用程序可能会根据地理位置为匿名用户分配一些身份。 当前,应用程序可以子类 DefaultHandshakeHandler 并覆盖确定用户方法。 然后可以插入自定义握手处理程序(参见第 22.2.4 节“部署注意事项”中的示例)。

这是一个答案( ),它向您展示了如何创建 AnonymousPrincipal 并在自定义握手处理程序中确定它。

最后,您必须将自定义握手处理程序的实例添加到您注册的端点,但这取决于您是否使用 STOMP。

以下是来自 StompSubProtocolHandler 的一些代码片段 - handleMessageFromClient 方法将用户添加到 stompAuthentications 映射并发布 SessionConnectEvent 事件 -

public void handleMessageFromClient(WebSocketSession session, WebSocketMessage<?> webSocketMessage, MessageChannel outputChannel) {
//...
SimpAttributesContextHolder.setAttributesFromMessage(message);
boolean sent = outputChannel.send(message);

if (sent) {
    if (isConnect) {
        Principal user = headerAccessor.getUser();
        if (user != null && user != session.getPrincipal()) {
            this.stompAuthentications.put(session.getId(), user);
        }else{
              //TODO try to handle here for anonymous user
        }
    }
    if (this.eventPublisher != null) {
        if (isConnect) {
            publishEvent(new SessionConnectEvent(this, message, getUser(session)));
        }
//...

我认为您必须检查此源代码 ,并对其进行自定义。

  相关解决方案