<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
首先,導包。
在pom.xml檔案裡面加入以下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>
jar包不做多解釋了,看那個artifactId的內容應該能知道幹啥的。
然後是yml檔案:
spring: redis: database: 0 host: 127.0.0.1 port: 6379 password: jedis.pool.max-idle: 100 jedis.pool.max-wait: -1ms jedis.pool.min-idle: 2 timeout: 2000ms
是的,很精簡。
然後是,到你的RedisConfig檔案上面,開啟redis的session關聯註解(其實不用這個註解也是沒問題的,後面自己可以去除看看。)
@EnableRedisHttpSession(maxInactiveIntervalInSeconds=60) 這邊是設定存入redis裡面的值的過期時間。
預設不設定的話,是1800秒即30分鐘。
@EnableRedisHttpSession
如:
OK,我們開始共用session咯!
@GetMapping("/setSessionValue") public String setredisResult(HttpServletRequest request){ request.getSession().setAttribute(request.getSession().getId(), "---測試資料---"+request.getRequestURL()); System.out.println(request.getSession().getId()); return "set成功,已經存入session域且redis裡面也會有值"; } @GetMapping("/getSessionValue") public String redisResult(HttpServletRequest request) { System.out.println(request.getSession().getId()); String value = String.valueOf(request.getSession().getAttribute(request.getSession().getId())); return "取值成功 :"+value; }
先執行第一個, 如下:
控制檯列印出sessionid值:
然後再瞟一眼redis資料庫,是的,沒錯,可以看到redis也儲存了這個session對談的相關資訊。 (TTL是過期時間)
然後存取下第二個介面,可以看到根據sessionid作為Key去session域是能正常獲取值的,
好了,redis實現session共用到此其實已經完畢了!
有人可能會有疑問,怎麼體現共用了? 這時候,你如果實現負載均衡,開啟兩個tomcat伺服器,不同埠,然後用通過瀏覽器通過不同埠去存取,你會發現,通過request.getSession().getId()拿出來的sessionid是一樣一樣的!
那麼接下來簡單介紹下,使用這個唯一id來實現單點登入
@GetMapping("/userLogin") public String setRedisResult(HttpServletRequest request){ //第一次登入 //1. 取出當期使用者端的sessionId String sId=request.getSession().getId(); //2. 查詢該sessionId 是否存在於redis boolean exists = redisUtils.exists(sId); if (!exists){ //2.1未登入過,進行使用者資訊的校驗 //如果通過後,寫入session域進行共用,即使是負載不同埠,sessionId不會發生變化 request.getSession().setAttribute(sId, "login success"); redisUtils.setWithTime(sId,"login success",1000); return "success login!"; //如果不通過,那麼返回登入頁面,省略 }else { //2.2 已經登入過,則存入redis中重新整理過期時間,再直接返回成功頁面 redisUtils.setWithTime(sId,"login success",1000); return " yes,you are allow!"; } } @GetMapping("/userLoginOut") public String userLoginOut(HttpServletRequest request){ String sId=request.getSession().getId(); redisUtils.remove(sId); return "login out!"; }
ps:程式碼裡使用到的工具類RedisUtils 在之前的文章裡有
可以看到以上情況其實單純使用redis配合sesionid共用後就能完成單點登入;
題外補充:
但是以上這種情況是使用上了redis的session共用,保證了sessionId不變,所以每次去出來,在有效時間內都是一樣的。
既然都講到了單點登入嗎,那麼如果單純使用redis不使用session共用怎麼去實現呢?那就是將第一次登入的sessionId儲存在瀏覽器cookise裡,這樣每次登入通過cookise去拿出頭一次固定不變的sessionid,來判斷使用者是否有登入過。
這種思路實現方案是:
//登入介面 @GetMapping("/userLogin") public String setRedisResult(HttpServletRequest request, HttpServletResponse response){ //第一次登入 //1. 取出當期使用者端的sessionId String sId=request.getSession().getId(); String cookies = getCookies(request); if (cookies==null || cookies.equals("")){ System.out.println("沒有登入過,準備進行登入!"); //執行登入邏輯 //寫入cookie writeLoginToken(response,sId); //這裡設定cookie的過期時間應當與redis設定的時間且與session失效時間保持一致 //寫入redis redisUtils.setWithTime(sId,"userInfo",1000); System.out.println("登入成功!"); return "success login!"; }else{ boolean exists = redisUtils.exists(cookies); if (exists){ System.out.println("已經登入過,正常登入!"); return " yes,you are allow!"; }else { return "資訊異常不允許登入"; } } }
到此這篇關於Redis實現Session共用與單點登入的文章就介紹到這了,更多相關Redis Session共用與單點登入內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45