SpringBoot中HttpSessionListener的簡單使用方式
HttpSessionListener的使用方式
session監(jiān)聽實(shí)現(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) { ? ? ?? ?//設(shè)置session持續(xù)時(shí)間,單位為秒 ? ? ? ? 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調(diào)用
? ? @RequestMapping("/sessionTest") ? ? @ResponseBody ? ? public void sessionTest(HttpServletRequest request){ ? ? ? ? request.getSession().setAttribute("name","zwq"); ? ? ? ? //銷毀session ? ? ? ? request.getSession().invalidate(); ? ? }
注意點(diǎn):
1、request.getSession(),獲取即創(chuàng)建session,會(huì)觸發(fā)session監(jiān)聽實(shí)現(xiàn)類中的sessionCreated方法;
2、session過了有效時(shí)間或主動(dòng)使用invalidate方法銷毀,會(huì)觸發(fā)session監(jiān)聽實(shí)現(xiàn)類中的sessionDestroyed方法;
3、使用監(jiān)聽器一定要確??梢员籹pringboot掃描到并打包成bean,一般來說在監(jiān)聽器實(shí)現(xiàn)類前加 @Component注解并保證該類在程序掃描范圍內(nèi)即可。
注冊(cè)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()); ?? ?} }
啟動(dòng)類上已經(jīng)加了注解@ServletComponentScan
訪問接口:
@RestController public class HelloController { ? ? @RequestMapping("/hello") ? ? public String handle01(){ ? ? ? ? return "nihao你好"; ? ? } }
這樣寫之后,發(fā)現(xiàn)第一次訪問時(shí),控制臺(tái)并不會(huì)打?。?/p>
System.out.println("session創(chuàng)建===ID===="+session.getId());
原因
在訪問接口時(shí),形參要帶上HttpSession session.
如下:
@RestController public class HelloController { ? ? @RequestMapping("/hello") ? ? public String handle01(HttpSession session){ ? ? ? ? return "nihao你好"; ? ? } }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- SpringBoot整合Netty+Websocket實(shí)現(xiàn)消息推送的示例代碼
- springboot整合websocket后啟動(dòng)報(bào)錯(cuò)(javax.websocket.server.ServerContainer not available)
- SpringBoot 整合WebSocket 前端 uniapp 訪問的詳細(xì)方法
- Springboot整合WebSocket實(shí)戰(zhàn)教程
- SpringBoot整合WebSocket的客戶端和服務(wù)端的實(shí)現(xiàn)代碼
- 空指針HttpSession異常之SpringBoot集成WebSocket的方法
相關(guān)文章
Maven高級(jí)的聚合和繼承的實(shí)現(xiàn)
在軟件開發(fā)中,隨著項(xiàng)目規(guī)模的擴(kuò)大,單個(gè)模塊的開發(fā)方式逐漸轉(zhuǎn)變?yōu)槎嗄K開發(fā),這種方式帶來了項(xiàng)目管理上的挑戰(zhàn),其中最常見的問題是模塊間的依賴管理和版本控制問題,本文就來介紹一下2024-10-10Java實(shí)現(xiàn)去掉字符串重復(fù)字母的方法示例
這篇文章主要介紹了Java實(shí)現(xiàn)去掉字符串重復(fù)字母的方法,涉及java針對(duì)字符串的遍歷、判斷、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下2017-12-12關(guān)于批量插入或更新數(shù)據(jù)(MyBatis-plus框架)
這篇文章主要介紹了關(guān)于批量插入或更新數(shù)據(jù)(MyBatis-plus框架),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09Java精品項(xiàng)目瑞吉外賣之新增菜品與分頁查詢篇
這篇文章主要為大家詳細(xì)介紹了java精品項(xiàng)目-瑞吉外賣訂餐系統(tǒng),此項(xiàng)目過大,分為多章獨(dú)立講解,本篇內(nèi)容為新增菜品和分頁查詢功能的實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05java?String到底有多長?String超出長度該如何解決
在Java中,由于字符串常量池的存在,String常量長度限制取決于String常量在常量池中的存儲(chǔ)大小,下面這篇文章主要給大家介紹了關(guān)于java?String到底有多長?String超出長度該如何解決的相關(guān)資料,需要的朋友可以參考下2023-01-01SpringBoot整合MinIO實(shí)現(xiàn)文件存儲(chǔ)系統(tǒng)的代碼示例
在現(xiàn)代的應(yīng)用程序中,文件存儲(chǔ)和管理是一個(gè)常見的需求,MinIO是一個(gè)開源的對(duì)象存儲(chǔ)系統(tǒng),與Spring?Boot框架結(jié)合使用,可以快速構(gòu)建高性能的文件存儲(chǔ)系統(tǒng),本文將介紹如何使用Spring?Boot和MinIO來實(shí)現(xiàn)文件存儲(chǔ)系統(tǒng)2023-06-06