如何根据sessionID获取session解决方案
點個贊,看一看,好習慣!本文 GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收錄,這是我花了3個月總結的一線大廠Java面試總結,本人已拿騰訊等大廠offer。
另外,原創文章首發在我的個人博客:blog.ouyangsihai.cn,歡迎訪問。
一、寫在前面
最近在做一個項目的時候,本來是想通過session來存一些數據的,但是,發現當兩次訪問的方法不同時,后臺的session是不一樣的,也就是說sessionId,不一致,所以導致的問題就是:當我需要從session取值的時候,總是出現取不到值的情況,后面也想過用redis,但是也被坑了。
后來,想到就是通過和前端溝通,通過sessionId和前端進行交互,來保證每一次的session是一致的,所以就想到了下面的方法。
二、以前解決方法
根據sessionID有一個比較簡單的方法,使用session上下文即可
HttpSession sess = session.getSessionContext().getSession(sid)不過很可惜,java之后處于安全性考慮,不建議使用這個方法,雖然我不知道為什么對安全性會有影響,但是既然java不建議用了。下面來分享一個方法,使用session監聽器配合一個靜態的hashmap即可實現。
三、新的解決方法
首先,創建自己的sessionContext
public class MySessionContext { private static MySessionContext instance; private HashMap<String,HttpSession> sessionMap; private MySessionContext() { sessionMap = new HashMap<String,HttpSession>(); } public static MySessionContext getInstance() { if (instance == null) { instance = new MySessionContext(); } return instance; } public synchronized void addSession(HttpSession session) { if (session != null) { sessionMap.put(session.getId(), session); } } public synchronized void delSession(HttpSession session) { if (session != null) { sessionMap.remove(session.getId()); } } public synchronized HttpSession getSession(String sessionID) { if (sessionID == null) { return null; } return sessionMap.get(sessionID); } }然后建立session監聽,要實現HttpSessionListener接口
public class SessionListener implements HttpSessionListener { private MySessionContext myc = MySessionContext.getInstance(); public void sessionCreated(HttpSessionEvent httpSessionEvent) { HttpSession session = httpSessionEvent.getSession(); myc.addSession(session); } public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { HttpSession session = httpSessionEvent.getSession(); myc.delSession(session); } }接著,在web.xml中配置session監聽器
<listener> <listener-class>com.chinapost.manager.utils.SessionListener</listener-class> </listener>注意:這個SessionListener是監聽器的路徑
完事,大功告成,之后在代碼中直接獲取就OK了
MySessionContext myc= MySessionContext.getInstance(); HttpSession sess = myc.getSession(sessionId);好了,這樣就完美的解決了問題了
最后,再分享我歷時三個月總結的 Java 面試 + Java 后端技術學習指南,這是本人這幾年及春招的總結,已經拿到了大廠offer,整理成了一本電子書,拿去不謝,目錄如下:
現在免費分享大家,在下面我的公眾號 程序員的技術圈子 回復 面試 即可獲取。
有收獲?希望老鐵們來個三連擊,給更多的人看到這篇文章
1、老鐵們,關注我的原創微信公眾號「程序員的技術圈子」,專注于Java、數據結構和算法、微服務、中間件等技術分享,保證你看完有所收獲。
2、給俺點個贊唄,可以讓更多的人看到這篇文章,順便激勵下我繼續寫作,嘻嘻。
3、另外,原創文章首發在我的個人博客:blog.ouyangsihai.cn,歡迎訪問。
點贊是對我最大的鼓勵
↓↓↓↓↓↓
總結
以上是生活随笔為你收集整理的如何根据sessionID获取session解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SSM三大框架整合Springfox(S
- 下一篇: java.lang.NoClassDef