据我所知,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
谢谢!!实际上我使用的是WebSocketMessageBrokerConfigurer,但是使用它可以工作:registry.addEndpoint(“/ api/v1/ws/pushService”)。withSockJS()。setInterceptors(wsSessionInterceptor); – Icaro