SpringBoot中HttpSessionListener的简单使用方式


Posted in Java/Android onMarch 17, 2022

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你好";
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
解决tk mapper 通用mapper的bug问题
Jun 16 Java/Android
使用feign服务调用添加Header参数
Jun 23 Java/Android
Java并发编程必备之Future机制
Jun 30 Java/Android
Java SSM配置文件案例详解
Aug 30 Java/Android
idea以任意顺序debug多线程程序的具体用法
Aug 30 Java/Android
Spring依赖注入多种类型数据的示例代码
Mar 31 Java/Android
SpringCloud项目如何解决log4j2漏洞
Apr 10 Java/Android
Java中的继承、多态以及封装
Apr 11 Java/Android
Java版 单机五子棋
May 04 Java/Android
Spring IOC容器Bean的作用域及生命周期实例
May 30 Java/Android
Android开发手册TextInputLayout样式使用示例
Jun 10 Java/Android
Java 多线程并发FutureTask
Jun 28 Java/Android
SpringBoot+Redis实现布隆过滤器的示例代码
Mar 17 #Java/Android
Java9新特性对HTTP2协议支持与非阻塞HTTP API
Java练习之潜艇小游戏的实现
Mar 16 #Java/Android
你知道Java Spring的两种事务吗
Java并发编程之原子性-Atomic的使用
Java9新特性之Module模块化编程示例演绎
Mar 16 #Java/Android
JVM的类加载器和双亲委派模式你了解吗
You might like
转PHP手册及PHP编程标准
2006/12/17 PHP
PHP 数组排序方法总结 推荐收藏
2010/06/30 PHP
PHP下载远程文件到本地存储的方法
2015/03/24 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
JavaScript中的ArrayBuffer详细介绍
2014/12/08 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
2015/07/18 Javascript
深入学习JavaScript对象
2015/10/13 Javascript
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
jQuery+正则+文本框只能输入数字的实现方法
2016/10/07 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
Chrome调试折腾记之JS断点调试技巧
2017/09/11 Javascript
详解nodejs通过响应回写的方式渲染页面资源
2018/04/07 NodeJs
vue中使用vee-validator完成表单校验方案
2019/11/01 Javascript
html2canvas属性和使用方法以及如何使用html2canvas将HTML内容写入Canvas生成图片
2020/01/12 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
[51:29]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第一场 11.05
2020/11/05 DOTA
python处理csv数据的方法
2015/03/11 Python
Python使用matplotlib的pie函数绘制饼状图功能示例
2018/01/08 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
Python常见数字运算操作实例小结
2019/03/22 Python
Omio西班牙:全欧洲低价大巴、火车和航班搜索和比价
2017/02/11 全球购物
澳大利亚儿童精品仓库:Goo & Co.
2019/06/20 全球购物
查环查孕证明
2014/01/10 职场文书
大学生个人先进事迹材料范文
2014/05/03 职场文书
2014领导班子四风剖析对照检查材料思想汇报
2014/09/20 职场文书
恋恋笔记本观后感
2015/06/16 职场文书
公司欠款证明
2015/06/24 职场文书
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python
阿里云服务器部署RabbitMQ集群的详细教程
2022/06/01 Servers
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript