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项目控制台中文乱码