spring+websocket获取httpsession为null
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>
上一篇:
IDEA上Java项目控制台中文乱码
