SpringBoot中HttpSessionListener的简单使用方式
作者:张文琪2022
这篇文章主要介绍了SpringBoot中HttpSessionListener的简单使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
HttpSessionListener的使用方式
session监听实现类
import org.springframework.stereotype.Component; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; @Component public class MySessionListener implements HttpSessionListener { @Override public void sessionCreated(HttpSessionEvent se) { //设置session持续时间,单位为秒 se.getSession().setMaxInactiveInterval(10); System.out.println("-----------Session已创建------------------"); } @Override public void sessionDestroyed(HttpSessionEvent se) { String name = (String)se.getSession().getAttribute("name"); System.out.println("name= "+ name); System.out.println("-----------Session已销毁------------------"); } }
controller调用
@RequestMapping("/sessionTest") @ResponseBody public void sessionTest(HttpServletRequest request){ request.getSession().setAttribute("name","zwq"); //销毁session request.getSession().invalidate(); }
注意点:
1、request.getSession(),获取即创建session,会触发session监听实现类中的sessionCreated方法;
2、session过了有效时间或主动使用invalidate方法销毁,会触发session监听实现类中的sessionDestroyed方法;
3、使用监听器一定要确保可以被springboot扫描到并打包成bean,一般来说在监听器实现类前加 @Component注解并保证该类在程序扫描范围内即可。
注册HttpSessionListener失效原因
问题描述
监听器:
@WebListener public class MyHttpSessionListener implements HttpSessionListener { /** * session创建 */ @Override public void sessionCreated(HttpSessionEvent e) { HttpSession session=e.getSession(); System.out.println("session创建===ID===="+session.getId()); } /** * session销毁 */ @Override public void sessionDestroyed(HttpSessionEvent e) { HttpSession session=e.getSession(); System.out.println("销毁的sessionID===="+session.getId()); } }
启动类上已经加了注解@ServletComponentScan
访问接口:
@RestController public class HelloController { @RequestMapping("/hello") public String handle01(){ return "nihao你好"; } }
这样写之后,发现第一次访问时,控制台并不会打印:
System.out.println("session创建===ID===="+session.getId());
原因
在访问接口时,形参要带上HttpSession session.
如下:
@RestController public class HelloController { @RequestMapping("/hello") public String handle01(HttpSession session){ return "nihao你好"; } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- springboot普通类中如何获取session问题
- SpringBoot3整合MyBatis出现异常:Property 'sqlSessionFactory'or 'sqlSessionTemplate' are required
- SpringBoot集成redis与session实现分布式单点登录
- SpringBoot Session接口验证实现流程详解
- SpringBoot整合SpringSession实现分布式登录详情
- SpringBoot 整合 Spring-Session 实现分布式会话项目实战
- 详解SpringBoot中@SessionAttributes的使用
- SpringBoot2.x设置Session失效时间及失效跳转方式
- SpringBoot下实现session保持方式
- Spring Session(分布式Session共享)实现示例