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>
经验分享 程序员 微信小程序 职场和发展