spring整合websocket,需要在拦截器中(HandshakeInterceptor的实现类)beforeHandshake中获取HttpSession,但是获取的值为null
代码如下:
public class HandShake implements HandshakeInterceptor {
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
if (request instanceof ServletServerHttpRequest) {
ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
HttpSession httpSession = servletRequest.getServletRequest().getSession(false);
//httpSession 为null
}
return true;
}
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {
}
}
可以通过添加一个监听器解决:
@WebListener
public class RequestListener implements ServletRequestListener{
@Override
public void requestDestroyed(ServletRequestEvent sre) {
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
//将所有request请求都携带上httpSession
((HttpServletRequest)sre.getServletRequest()).getSession();
}
}
在web.xml中添加:
<listener>
<listener-class>包名.RequestListener</listener-class>
</listener>
在Spring框架下整合WebSocket时,通过HandshakeInterceptor的beforeHandshake方法获取HttpSession的值为null的问题及解决方案。通过添加一个监听器,在所有request请求中携带httpSession,确保会话信息正确传递。
2458

被折叠的 条评论
为什么被折叠?



