SpringBoot中HttpSessionListener的简单使用方式
短信预约 -IT技能 免费直播动态提醒
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 {
@Override
public void sessionCreated(HttpSessionEvent e) {
HttpSession session=e.getSession();
System.out.println("session创建===ID===="+session.getId());
}
@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你好";
}
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341