SpringBoot中HttpSessionListener的簡單使用方式
HttpSessionListener的使用方式
session監(jiān)聽實現(xiàn)類
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持續(xù)時間,單位為秒 ? ? ? ? se.getSession().setMaxInactiveInterval(10); ? ? ? ? System.out.println("-----------Session已創(chuàng)建------------------"); ? ? } ? ? @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(),獲取即創(chuàng)建session,會觸發(fā)session監(jiān)聽實現(xiàn)類中的sessionCreated方法;
2、session過了有效時間或主動使用invalidate方法銷毀,會觸發(fā)session監(jiān)聽實現(xiàn)類中的sessionDestroyed方法;
3、使用監(jiān)聽器一定要確??梢员籹pringboot掃描到并打包成bean,一般來說在監(jiān)聽器實現(xiàn)類前加 @Component注解并保證該類在程序掃描范圍內即可。
注冊HttpSessionListener失效原因
問題描述
監(jiān)聽器:
@WebListener public class MyHttpSessionListener implements HttpSessionListener { ?? ?/** ?? ? * session創(chuàng)建 ?? ? */ ?? ?@Override ?? ?public void sessionCreated(HttpSessionEvent e) { ?? ??? ?HttpSession session=e.getSession(); ?? ??? ?System.out.println("session創(chuàng)建===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你好"; ? ? } }
這樣寫之后,發(fā)現(xiàn)第一次訪問時,控制臺并不會打印:
System.out.println("session創(chuàng)建===ID===="+session.getId());
原因
在訪問接口時,形參要帶上HttpSession session.
如下:
@RestController public class HelloController { ? ? @RequestMapping("/hello") ? ? public String handle01(HttpSession session){ ? ? ? ? return "nihao你好"; ? ? } }
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
關于批量插入或更新數(shù)據(jù)(MyBatis-plus框架)
這篇文章主要介紹了關于批量插入或更新數(shù)據(jù)(MyBatis-plus框架),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09java?String到底有多長?String超出長度該如何解決
在Java中,由于字符串常量池的存在,String常量長度限制取決于String常量在常量池中的存儲大小,下面這篇文章主要給大家介紹了關于java?String到底有多長?String超出長度該如何解決的相關資料,需要的朋友可以參考下2023-01-01SpringBoot整合MinIO實現(xiàn)文件存儲系統(tǒng)的代碼示例
在現(xiàn)代的應用程序中,文件存儲和管理是一個常見的需求,MinIO是一個開源的對象存儲系統(tǒng),與Spring?Boot框架結合使用,可以快速構建高性能的文件存儲系統(tǒng),本文將介紹如何使用Spring?Boot和MinIO來實現(xiàn)文件存儲系統(tǒng)2023-06-06