空指针:HttpSession异常,SpringBoot集成WebSocket

异常可能性:

  • 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://blog.csdn.net/csu_passer/article/details/78536060

java 复制代码
@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,存点东西进去试试。

java 复制代码
@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");
    }
}
相关推荐
狼爷3 分钟前
从零用 Java 构建 AI Agent 框架:JavaManus 设计与实现深度解析
后端·langchain·aigc
郑州光合科技余经理5 分钟前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
专业程序开发源21 分钟前
springboot简历管理系统81389-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
专业程序开发源34 分钟前
springboot社区养老系统44071-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·php·课程设计
小呆呆66642 分钟前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
周杰伦fans1 小时前
8GB显存下模型量化实战指南
人工智能·后端·c#
余槐i1 小时前
数据没回滚也不报错:@Transactional 自调用失效的 3 种复现与修复
spring boot·mysql·多线程·spring 事务
小蒜学长2 小时前
基于SpringBoot的佳新超市管理系统设计与实现系统(代码+数据库+LW)
java·数据库·spring boot·后端·佳新超市管理系统
IT_陈寒2 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
打工仔折腾 AI3 小时前
把AI Agent托管在家用电脑:UU远程终端与端口映射实测记录
人工智能·后端·python·langchain·ai agent 实战