在校验令牌的时候把用户id存入到session中:
// 2.获取session
HttpSession httpSession = request.getSession();
httpSession.setAttribute("userId", userId);
此时的sessionid为:
然后这是我的websocket配置类:
@Slf4j
public class GetHttpSessionConfigurator extends ServerEndpointConfig.Configurator {
@Override
public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
// 获取HttpSession对象
HttpSession httpSession = (HttpSession) request.getHttpSession();
log.info("websocket httpsessionId" + httpSession.getId());
if (httpSession != null) {
log.info("httpsession" + httpSession);
sec.getUserProperties().put(HttpSession.class.getName(), httpSession);
} else {
log.info("httpsession是空");
}
}
}
此时是获取不到session的:
然后通过上网一些列资料添加了如下配置:
@Component
public class RequestListener implements ServletRequestListener {
public void requestInitialized(ServletRequestEvent sre) {
//将所有request请求都携带上httpSession
((HttpServletRequest) sre.getServletRequest()).getSession();
}
}
因为websocket没有httpsession是不会默认创建的,所以在这里对每次请求之前都手动获取一个session,但是问题来了此时的sessionid:
虽然拿到了session 但不是同一个session数据里面的数据自然也是null,干脆采取存入redis,有好的方法欢迎大家分享交流一下。