SpringBoot中HttpSessionListener的简单使用方式

网友投稿 392 2022-08-19


SpringBoot中HttpSessionListener的简单使用方式

目录HttpSessionListener的使用方式session监听实现类controller调用注册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());

}

/**

*http:// 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你好";

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java中的随机数Random
下一篇:SpringBoot+Redis实现布隆过滤器的示例代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~