2014-02-14 30 views

回答

1

这一个可以与一个连接握手拦截器(javadoc)完成的,引述documentation:定制

的最简单方法的初始HTTP网页套接字握手 请求是通过HandshakeInterceptor,它公开“之前”和“之后”的握手方法。

+0

谢谢!!实际上我使用的是WebSocketMessageBrokerConfigurer,但是使用它可以工作:registry.addEndpoint(“/ api/v1/ws/pushService”)。withSockJS()。setInterceptors(wsSessionInterceptor); – Icaro

1

据我所知,DISCONNECT事件的问题在本主题中没有解决。握手拦截只会让您连接信息,但不会断开连接。

我与入站通道的拦截器来实现这一点:

<websocket:message-broker> 
    ... 
    <websocket:client-inbound-channel> 
     <websocket:interceptors> 
      <bean class="com......MyChannelInterception"></bean> 
     </websocket:interceptors> 
    </websocket:client-inbound-channel> 
</websocket:message-broker> 

...和...类

import java.security.Principal; 

import org.apache.log4j.LogManager; 
import org.apache.log4j.Logger; 
import org.springframework.messaging.Message; 
import org.springframework.messaging.MessageChannel; 
import org.springframework.messaging.MessageHeaders; 
import org.springframework.messaging.simp.SimpMessageType; 
import org.springframework.messaging.support.ChannelInterceptorAdapter; 

public class MyChannelInterception extends ChannelInterceptorAdapter { 

private static final Logger LOGGER = LogManager.getLogger(WrcChannelInterception.class); 

@Override 
public Message<?> preSend(Message<?> message, MessageChannel channel) { 

    MessageHeaders headers = message.getHeaders(); 
    SimpMessageType type = (SimpMessageType) headers.get("simpMessageType"); 
    String simpSessionId = (String) headers.get("simpSessionId"); 

    if (type == SimpMessageType.CONNECT) { 
     Principal principal = (Principal) headers.get("simpUser"); 
     LOGGER.debug("WsSession " + simpSessionId + " is connected for user " + principal.getName()); 
    } else if (type == SimpMessageType.DISCONNECT) { 
     LOGGER.debug("WsSession " + simpSessionId + " is disconnected"); 
    } 
    return message; 
} 
} 

请注意,主要是可在连接,但没有断开连接,不过你有甜点会​​话ID

+0

我怎么能通过sessionID获得委托人? – disorderdev

相关问题