空指针HttpSession异常之SpringBoot集成WebSocket的方法
作者:续写少年
文章介绍了在Spring Boot中集成WebSocket时遇到的HttpSession为空的问题,并探讨了三种解决方法,方法一涉及域名配置,方法二通过监听创建Session,而方法三是从request中获取session并存入数据,感兴趣的朋友一起看看吧
异常可能性:
- 404 : 请检查拦截器是否将请求拦截
- WebSocket握手期间HttpSession为空
HttpSession为空
方法一 :
网上参考大量的文档,有说跟前端请求域名有关系的。 反正对我来说,没啥用无法连接。
需使用 localhost,不能使用127.0.01
var host = window.location.host; var url = "ws://"+host+"/chatRoom/null";
方法二 :可以解决
添加监听配置 ,采用spring boot自动装配的方式,创建一个Session。
因为我需要存入数据,所以对我而言,不太ok。
其他原因看:WebSocket获取httpSession空指针异常的解决办法
https://www.jb51.net/program/334258vi3.htm
@WebListener public class RequestListener implements ServletRequestListener { @Override public void requestDestroyed(ServletRequestEvent servletRequestEvent) { } @Override public void requestInitialized(ServletRequestEvent servletRequestEvent) { ((HttpServletRequest)servletRequestEvent.getServletRequest()).getSession(); } }
虽然有Session了,还是连接不上!
方法三 :成功解决
灵感 : 方法2通过监听创建Session。监听最牛逼的不应该是拦截器或者过滤器。
可以从拦截器中获取到我需要的数据,在request里面配置,应该更好。从request中getSession,存点东西进去试试。
@WebFilter(urlPatterns = "/*") public class ArticleFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException{ long start = System.currentTimeMillis(); // 存入session System.out.println("存入session"); ((HttpServletRequest) request).getSession().setAttribute("name", 123); // 封装请求信息存储到请求上下文 chain.doFilter(request, response); long end = System.currentTimeMillis(); System.out.println("请求耗时:" + (end - start) + "ms"); } }
到此这篇关于空指针:HttpSession异常,SpringBoot集成WebSocket的文章就介绍到这了,更多相关SpringBoot集成WebSocket内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!