springboot根據(jù)sessionId查詢session方式
問題
跨域問題,session無法進(jìn)行同步,可以通過保存session和sessionId的方式進(jìn)行校驗(yàn),向前端傳送sessionId,前端可以通過頭部傳sessionId,通過sessionId獲取相關(guān)的信息,進(jìn)行校驗(yàn)等操作
1、創(chuàng)建一個(gè)類用于保存session
對(duì)session進(jìn)行添加,刪除,查詢
/**
* 自定義獲取指定sessionId的session
*/
public class MySessionContext {
private static MySessionContext instance;
private HashMap mymap;
private MySessionContext() {
mymap = new HashMap();
}
/**
* 創(chuàng)建MySessionContext的對(duì)象
* @return
*/
public static MySessionContext getInstance() {
if (instance == null) {
instance = new MySessionContext();
}
return instance;
}
/**
* 添加session
* @param session
*/
public synchronized void AddSession(HttpSession session) {
if (session != null) {
mymap.put(session.getId(), session);
}
}
/**
* 刪除session
* @param session
*/
public synchronized void DelSession(HttpSession session) {
if (session != null) {
mymap.remove(session.getId());
}
}
/**
* 查詢session
* @param session_id
* @return
*/
public synchronized HttpSession getSession(String session_id) {
if (session_id == null) {
return null;
}
return (HttpSession) mymap.get(session_id);
}
}
2、建立一個(gè)監(jiān)聽器
監(jiān)聽session的創(chuàng)建和銷毀
/**
* 監(jiān)聽器來監(jiān)控session的創(chuàng)建銷毀
*/
@WebListener
public class SessionListener implements HttpSessionListener {
private MySessionContext myc = MySessionContext.getInstance();
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
myc.AddSession(httpSessionEvent.getSession());
}
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
HttpSession session = httpSessionEvent.getSession();
myc.DelSession(session);
}
}
3、在啟動(dòng)類上添加注解
@ServletComponentScan用于掃描到SessionListener
@SpringBootApplication
@ServletComponentScan
public class RunMain{
public static void main(String[] args) {
SpringApplication.run(RunMain.class, args);
}
}
操作代碼
//創(chuàng)建MySessionContext對(duì)象 MySessionContext myContext = MySessionContext.getInstance(); //存儲(chǔ)session myContext.AddSession(session); //根據(jù)sessionId獲取session HttpSession httpSession = myContext.getSession(sessionId); //刪除session myContext.DelSession(session);
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot系列教程之dubbo和Zookeeper集成方法
這篇文章主要介紹了SpringBoot系列教程之dubbo和Zookeeper集成方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
SpringBoot3.0+SpringSecurity6.0+JWT的實(shí)現(xiàn)
本文主要介紹了SpringBoot3.0+SpringSecurity6.0+JWT的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11
SpringBoot下實(shí)現(xiàn)session保持方式
這篇文章主要介紹了SpringBoot下實(shí)現(xiàn)session保持方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
Spring Boot Admin 進(jìn)行項(xiàng)目監(jiān)控管理的方法
Spring Boot Admin是一個(gè)開源社區(qū)項(xiàng)目,用于管理和監(jiān)控SpringBoot應(yīng)用程序。 這篇文章主要介紹了 Spring Boot Admin 進(jìn)行項(xiàng)目監(jiān)控管理的方法,需要的朋友可以參考下2020-07-07

