在websocket中获取httpsession

1.新建

public class HttpSessionConfigurator extends Configurator {

    @Override
    public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
        HttpSession httpSession = (HttpSession) request.getHttpSession();
        sec.getUserProperties().put(HttpSession.class.getName(), httpSession);
    }

}

2.新建

@Component
public class RequestListener implements ServletRequestListener {

    public void requestInitialized(ServletRequestEvent sre)  {
        //将所有request请求都携带上httpSession
        ((HttpServletRequest) sre.getServletRequest()).getSession();

    }
    public RequestListener() {
    }

    public void requestDestroyed(ServletRequestEvent arg0)  {
    }
}

3.在配置类中添加

@Autowired
private RequestListener requestListener;

@Bean
public ServletListenerRegistrationBean<RequestListener> servletListenerRegistrationBean() {
    ServletListenerRegistrationBean<RequestListener> servletListenerRegistrationBean = new ServletListenerRegistrationBean<>();
    servletListenerRegistrationBean.setListener(requestListener);
    return servletListenerRegistrationBean;
}

4.在@ServerEndpoint后面添加配置类

@ServerEndpoint(value="/ws",configurator = HttpSessionConfigurator.class)

并修改onOpen方法

public void onOpen(Session session,EndpointConfig config) {
    HttpSession httpSession= (HttpSession) config.getUserProperties().get(HttpSession.class.getName());
    ……………………
}

注意:我自己写的时候发现httpsession总是没有值,后来发现原因在于自己浏览器访问的ip用的127.0.0.1而websocket连接用的ip为电脑实际ip,改成一样的就好了。感谢网友分享让我找到原因https://blog.csdn.net/qq_35101027/article/details/80745664。另外,其他部分代码是根据https://www.cnblogs.com/zhuxiaojie/p/6238826.html学着写的,原文更加详细,大家可以看看,同样表示感谢。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
WebSocket是一种协议,它允许在Web浏览器和Web服务器之间进行实时的双向通信。HTTPSession是一种在Web服务器和Web应用程序之间存储数据的机制。WebSocketHTTPSession都是Web应用程序常用的机制,但是它们的目的和用途不同。 WebSocket是一种协议,用于实现实时的双向通信。它允许在Web浏览器和Web服务器之间建立一个持久的连接,从而可以在两端之间发送实时数据。与HTTP请求不同,WebSocket连接是持久的,不需要每次请求都去建立一个新的连接。这使得WebSocket可以实现实时的双向通信,比如聊天室、在线游戏等应用。 HTTPSession是一种在Web服务器和Web应用程序之间存储数据的机制。它可以存储用户的会话信息,比如登录状态、购物车内容等。当用户在Web应用程序进行操作时,这些信息可以被存储在HTTPSession。Web应用程序可以随时从HTTPSession获取这些信息,从而实现用户状态的跟踪和管理。 在WebSocketHTTPSession可以用来存储与WebSocket连接相关的数据。比如,当一个用户与WebSocket建立连接时,可以将用户的会话信息存储在HTTPSession。当用户发送消息时,可以从HTTPSession获取用户的会话信息,从而实现消息的处理和分发。HTTPSession还可以用来存储WebSocket连接的状态信息,比如连接的当前状态、连接的过期时间等。 总之,WebSocketHTTPSession都是Web应用程序常用的机制,但它们的目的和用途不同。WebSocket用于实现实时的双向通信,HTTPSession用于存储和管理用户的会话信息。在WebSocketHTTPSession可以用来存储与WebSocket连接相关的数据和状态信息。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值