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 相关文章推荐
Java方法重载和方法重写的区别到底在哪?
Jun 11 Java/Android
浅谈@Value和@Bean的执行顺序问题
Jun 16 Java/Android
JavaGUI模仿QQ聊天功能完整版
Jul 04 Java/Android
java设计模式--原型模式详解
Jul 21 Java/Android
SpringBoot SpringEL表达式的使用
Jul 25 Java/Android
Java实现学生管理系统(IO版)
Feb 24 Java/Android
Java 超详细讲解IO操作字节流与字符流
Mar 25 Java/Android
Dubbo+zookeeper搭配分布式服务的过程详解
Apr 03 Java/Android
Java 通过手写分布式雪花SnowFlake生成ID方法详解
Apr 07 Java/Android
Java+swing实现抖音上的表白程序详解
Jun 25 Java/Android
OpenFeign实现远程调用
Aug 14 Java/Android
Java使用HttpClient实现文件下载
Aug 14 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
生成sessionid和随机密码的例子
2006/10/09 PHP
php+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
2007/03/07 PHP
PHP代码审核的详细介绍
2013/06/13 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
PHP实现接收二进制流转换成图片的方法
2017/01/10 PHP
laravel入门知识点整理
2020/09/15 PHP
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
基于jquery打造的百分比动态色彩条插件
2012/09/19 Javascript
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
html+css+js实现xp window界面及有关功能
2013/03/26 Javascript
JavaScript多图片上传案例
2015/09/28 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
2016/02/16 Javascript
jQuery为动态生成的select元素添加事件的方法
2016/08/29 Javascript
微信小程序 slider的简单实例
2017/04/19 Javascript
AngularJS的ng-click传参的方法
2017/06/19 Javascript
老生常谈JavaScript面向对象基础与this指向问题
2017/10/16 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
解决vue+webpack打包路径的问题
2018/03/06 Javascript
JavaScript中var、let、const区别浅析
2018/06/24 Javascript
如何在JavaScript中创建具有多个空格的字符串?
2020/02/23 Javascript
[49:20]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
python中as用法实例分析
2015/04/30 Python
Anaconda2 5.2.0安装使用图文教程
2018/09/19 Python
使用Python和Prometheus跟踪天气的使用方法
2019/05/06 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
python实现简单日志记录库glog的使用
2019/12/13 Python
Python如何进行时间处理
2020/08/06 Python
浅谈matplotlib默认字体设置探索
2021/02/03 Python
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
2021/03/14 PHP
亿企通软件测试面试题
2012/04/10 面试题
医学专业本科毕业生自我鉴定
2013/12/28 职场文书
小学生手册家长评语
2014/04/16 职场文书
竞聘自述材料
2014/08/25 职场文书
党代会心得体会
2014/09/04 职场文书
自荐信格式范文
2015/03/04 职场文书
利用Python判断你的密码难度等级
2021/06/02 Python