一、今天在学习 springboot2.x 拦截器的时候,发现直接使用 HttpSession 和 request.getSession().getAttribute() 会直接报错;

我的springboot2.x 版本:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.4</version><relativePath/> <!-- lookup parent from repository -->
</parent>

1、异常信息如下:

java.lang.AbstractMethodError: org.apache.tomcat.websocket.server.WsSessionListener.sessionCreated(Ljavax/servlet/http/HttpSessionEvent;)V

2、看异常大概是 session 无法创建;解决方法就是添加 redis 依赖和 spring session依赖,直接上代码:

2-1、pom.xml 添加 redis 依赖和 spring session依赖

<!--添加 Redis 整合 springboot 依赖-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--SpringSession依赖-->
<dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-core</artifactId>
</dependency>
<!--SpringSessionRedis依赖-->
<dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId>
</dependency>

2-2、application.properties 配置 redis 连接 和 spring session缓存类型

#使用Redis缓存session数据
spring.session.store-type=REDIS
#Redis服务器地址
spring.redis.host=127.0.0.1
#Redis服务器端口号
spring.redis.port=6379

2-3、Application.java 开启扫描 Redis 和 Session

@SpringBootApplication
// 以秒为单位
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 800)
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

2-4、过滤器和控制层中使用HttpSeesion

- 控制层:@RequestMapping("/login")public Object login(HttpSession session){System.out.println("执行 login ");User user = new User();user.setId(12211);user.setName("小明");session.setAttribute("user",user);System.out.println("执行 login 完毕,保存 session 值");return "login success";}- 拦截器,preHandle// 拦截器入口,编写拦截业务逻辑@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 1 从session中获取用户的信息HttpSession session = request.getSession(true);User user = (User) session.getAttribute("user");// 2 判断用户是否存在if (user == null) {// 未登录response.sendRedirect(request.getContextPath() + "/user/error");return false;}System.out.println("执行 preHandle 完毕" + user);return true;}

3、要是配置完上面代码,项目还是无法启动,那要看看实体类是否实现序列化,本地redis服务是否启动;

4、要是有什么问题,欢迎大家评论。

解决Springboot2.X,无法用HttpSession报错org.apache.tomcat.websocket.server.WsSessionListener.sessionCreated相关推荐

  1. hive报错(org.apache.hadoop.hdfs.server.namenode.SafeModeException): Cannot create directory/tmp/hive/.

    报错场景: 使用shell脚本进行对hive的数据查询导入导致出错,先是hive执行时间较长,后面hive报错. 问题描述: 使用jps查询进程,发现有三个hive进程,三个RunJar,RunJar ...

  2. 按照黑马教程学习javaWeb出现Property ‘dataSource‘ is requir报错HTTP Status 500 – Internal Server Error——解决方案

    在做网页登录时候,servlet无法连接到数据库,报错提示 Property 'dataSource' is required 具体错误如下: HTTP Status 500 – Internal S ...

  3. 解决idea导入项目后依赖报错问题

    解决idea导入项目后依赖报错问题 参考文章: (1)解决idea导入项目后依赖报错问题 (2)https://www.cnblogs.com/dayandday/p/10607195.html (3 ...

  4. 解决Sublime包管理package control 报错 There are no packages available for installation

    解决Sublime包管理package control 报错 There are no packages available for installation 真的是哔了狗了,要不是我机智的重新安装了 ...

  5. python使用phantomJS循环for爬取多个页面时,解决内存持续变大而报错“ConnectionResetError: [WinError 10054]远程主机强迫关闭了一个现有的连接”的问题

    python使用phantomJS循环for爬取多个页面时,解决内存持续变大而报错"ConnectionResetError: [WinError 10054]远程主机强迫关闭了一个现有的连 ...

  6. 解决Pycharm添加虚拟解释器的报错问题

    解决Pycharm添加虚拟解释器的报错问题 参考文章: (1)解决Pycharm添加虚拟解释器的报错问题 (2)https://www.cnblogs.com/pyyu/p/9035436.html ...

  7. 解决VS2017中使用scanf函数报错的问题

    解决VS2017中使用scanf函数报错的问题 参考文章: (1)解决VS2017中使用scanf函数报错的问题 (2)https://www.cnblogs.com/tanghaiyong/p/11 ...

  8. 一种解决Android studio 3.0 Build报错的方法

    一种解决Android studio 3.0 Build报错的方法 参考文章: (1)一种解决Android studio 3.0 Build报错的方法 (2)https://www.cnblogs. ...

  9. [PVE]解决 ProXmoX VE升级 apt-get update 报错的问题

    [PVE]解决 ProXmoX VE升级 apt-get update 报错的问题 参考文章: (1)[PVE]解决 ProXmoX VE升级 apt-get update 报错的问题 (2)http ...

最新文章

  1. linux根-文件系统-目录管理-文件管理-用户及权限详解-用户组-用户管理-权限管理...
  2. 解决查询时报的cannot be cast to com.credithc.enjoy.manager.OrderResp错误
  3. Maven pom 文件解释
  4. windows文件与Linux文件互转
  5. php sql语句过滤,php如何做sql过滤
  6. 实现 npm script 跨平台兼容
  7. Android学习笔记---20_采用ContentProvider对外共享数据, UriMatcher类使用介绍 ,ContentUris类使用介绍,使用ContentResolver操作Conte
  8. linux运维、架构之路-Kubernetes本地镜像仓库+dashboard部署
  9. python异步io协程读文件_Python协程中的并行异步IO
  10. abb变频器dp适配器说明书_ABB变频器ACS510_CN使用说明书.pdf
  11. Qt之SQLite数据库可视化工具
  12. MATLAB到底有多厉害?
  13. 取文件操作fopen(file open)
  14. linux里面rpm是什么文件,linux中deb格式和rpm格式分别是什么?
  15. STM32学习笔记——USB鼠标
  16. day21组合III电话号码的字母组合
  17. 【行业科普】一篇文读懂四大、咨询、投行、PE
  18. OpenVINO-yolov5推理代码
  19. 正则表达式(RegExp)
  20. JS标签选择器以及节点操作

热门文章

  1. 大学C语言字符串题目,[转载]大学C语言考试题精选
  2. 比尔盖茨与乔布斯,你们觉得,二人谁更伟大
  3. html wap广告代码,手机wap底部悬浮JS广告代码
  4. iOS小技能:设置tableView的点击事件优先级低于cell的选中事件(场景:比如筛选视图,监听蒙版的点击事件就隐藏筛选视图)
  5. 核心微生物分析_基因测序找出肠道核心微生物群
  6. Python学习教程:针对任意多的分隔符拆分字符串
  7. 使电脑显示文件后缀名的俩种方法
  8. 1+xweb初级试题及笔记
  9. Mybatis-04
  10. java无法安装路径无效_Java环境 jdk无法切换版本,修改path路径也无效