Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spring WebSocket介绍如何在打开连接时发送参数_Java_Spring_Spring Boot_Spring Websocket_Java Websocket - Fatal编程技术网

Java spring WebSocket介绍如何在打开连接时发送参数

Java spring WebSocket介绍如何在打开连接时发送参数,java,spring,spring-boot,spring-websocket,java-websocket,Java,Spring,Spring Boot,Spring Websocket,Java Websocket,我正在使用TextWebSocketHandler和重写handleTextMessage为web套接字连接构建一个spring启动应用程序 但我有一个要求,当用户尝试连接到此端点时,我希望使用一些令牌进行验证。现在我知道我可以覆盖afterConnectionEstablished和afterConnectionClosed方法,但在创建套接字连接时是否可以获取一些请求参数或路径参数,以便存储此会话所属用户的详细信息 我可以用JavaEE7注释实现这一点,如下所示,但我不得不使用Spring:

我正在使用
TextWebSocketHandler
和重写
handleTextMessage
为web套接字连接构建一个spring启动应用程序

但我有一个要求,当用户尝试连接到此端点时,我希望使用一些令牌进行验证。现在我知道我可以覆盖
afterConnectionEstablished
afterConnectionClosed
方法,但在创建套接字连接时是否可以获取一些请求参数或路径参数,以便存储此会话所属用户的详细信息

我可以用JavaEE7注释实现这一点,如下所示,但我不得不使用Spring:

@ServerEndpoint("/ss/{token}")
public class SocketServerEndpoint {
    @Autowired
    private SService ssService;

    @OnOpen
    public void open(Session session, @PathParam("token")String token) throws SSException {
        ssService.processConnectionRequest(token, session);
    }

    @OnMessage
    public String handleMessage(String message, Session session) {
        ssService.processMessage(message);
        return "message_received";
    }

    @OnClose
    public void close(Session session) {
        ssService.removeSession(session);
    }
}

我对Spring Boot和Spring Web Sockets不熟悉,无法找到解决方法,请帮助

您可以使用ApplicationContext事件。有关更多信息,请参阅


我还解释了如何实现事件侦听器来捕获特定事件。

您可以实现WebSocketConfigurer并重写RegisterWebSocketHandler方法 定义端点,然后检索并放入属性

public void registerWebSocketHandlers(WebSocketHandlerRegistry registery) {
    logger.info("websocketHanlder registering Socket Handler .");
    registery.addHandler(new SocketTextHandler(), "ss/{token}").addInterceptors(get);
}

 private HandshakeInterceptor getInter() {
    return new HandshakeInterceptor() {
        @Override
        public boolean beforeHandshake(ServerHttpRequest serverHttpRequest,
                                       ServerHttpResponse serverHttpResponse,
                                       WebSocketHandler webSocketHandler,
                                       Map<String, Object> map) throws Exception {
            logger.info("Request ----------" + serverHttpRequest.getHeaders());

            String path = serverHttpRequest.getURI().getPath();
            logger.info("PATH  " + path);
            int index = path.indexOf("/ss");
            String id = path.substring(index);
            map.put("id", id);
            return true;
        }
  }
公共无效注册表WebSocketHandler(WebSocketHandlerRegistry注册表){
info(“websocketholder注册套接字处理程序”);
addHandler(新的SocketTextHandler(),“ss/{token}”).addInterceptors(get);
}
私有握手interceptor getInter(){
返回新的握手interceptor(){
@凌驾
握手前公共布尔值(ServerHttpRequest ServerHttpRequest,
ServerHttpResponse服务器HttpResponse,
WebSocketHandler WebSocketHandler,
映射)引发异常{
info(“Request------”+serverHttpRequest.getHeaders());
字符串路径=serverHttpRequest.getURI().getPath();
logger.info(“路径”+路径);
int index=path.indexOf(“/ss”);
字符串id=路径子字符串(索引);
地图放置(“id”,id);
返回true;
}
}
将它放到映射上后,可以从会话属性中检索它

public void registerWebSocketHandlers(WebSocketHandlerRegistry registery) {
    logger.info("websocketHanlder registering Socket Handler .");
    registery.addHandler(new SocketTextHandler(), "ss/{token}").addInterceptors(get);
}

 private HandshakeInterceptor getInter() {
    return new HandshakeInterceptor() {
        @Override
        public boolean beforeHandshake(ServerHttpRequest serverHttpRequest,
                                       ServerHttpResponse serverHttpResponse,
                                       WebSocketHandler webSocketHandler,
                                       Map<String, Object> map) throws Exception {
            logger.info("Request ----------" + serverHttpRequest.getHeaders());

            String path = serverHttpRequest.getURI().getPath();
            logger.info("PATH  " + path);
            int index = path.indexOf("/ss");
            String id = path.substring(index);
            map.put("id", id);
            return true;
        }
  }