国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - JAVA教程 - spring boot整合redis實現shiro的分布式session共享的方法

spring boot整合redis實現shiro的分布式session共享的方法

2021-03-27 13:51牛奮lch JAVA教程

本篇文章主要介紹了spring boot整合redis實現shiro的分布式session共享的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

我們知道,shiro是通過SessionManager來管理Session的,而對于Session的操作則是通過SessionDao來實現的,默認的情況下,shiro實現了兩種SessionDao,分別為CachingSessionDAO和MemorySessionDAO,當我們使用EhCache緩存時,則是使用的CachingSessionDAO,不適用緩存的情況下,就會選擇基于內存的SessionDao.所以,如果我們想實現基于Redis的分布式Session共享,重點在于重寫SessionManager中的SessionDao。我們的重寫代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package com.chhliu.springboot.shiro.cache;
import java.io.Serializable;
import java.util.Collection;
import java.util.concurrent.TimeUnit;
import org.apache.shiro.session.Session;
import org.apache.shiro.session.UnknownSessionException;
import org.apache.shiro.session.mgt.eis.AbstractSessionDAO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; 
@Service
@SuppressWarnings({ "rawtypes", "unchecked" })
public class RedisSessionDao extends AbstractSessionDAO {
 
  // Session超時時間,單位為毫秒
  private long expireTime = 120000;
 
  @Autowired
  private RedisTemplate redisTemplate;// Redis操作類,對這個使用不熟悉的,可以參考前面的博客
 
  public RedisSessionDao() {
    super();
  }
 
  public RedisSessionDao(long expireTime, RedisTemplate redisTemplate) {
    super();
    this.expireTime = expireTime;
    this.redisTemplate = redisTemplate;
  }
 
  @Override // 更新session
  public void update(Session session) throws UnknownSessionException {
    System.out.println("===============update================");
    if (session == null || session.getId() == null) {
      return;
    }
    session.setTimeout(expireTime);
    redisTemplate.opsForValue().set(session.getId(), session, expireTime, TimeUnit.MILLISECONDS);
  }
 
  @Override // 刪除session
  public void delete(Session session) {
    System.out.println("===============delete================");
    if (null == session) {
      return;
    }
    redisTemplate.opsForValue().getOperations().delete(session.getId());
  }
 
  @Override// 獲取活躍的session,可以用來統計在線人數,如果要實現這個功能,可以在將session加入redis時指定一個session前綴,統計的時候則使用keys("session-prefix*")的方式來模糊查找redis中所有的session集合
  public Collection<Session> getActiveSessions() {
    System.out.println("==============getActiveSessions=================");
    return redisTemplate.keys("*");
  }
 
  @Override// 加入session
  protected Serializable doCreate(Session session) {
    System.out.println("===============doCreate================");
    Serializable sessionId = this.generateSessionId(session);
    this.assignSessionId(session, sessionId);
 
    redisTemplate.opsForValue().set(session.getId(), session, expireTime, TimeUnit.MILLISECONDS);
    return sessionId;
  }
 
  @Override// 讀取session
  protected Session doReadSession(Serializable sessionId) {
    System.out.println("==============doReadSession=================");
    if (sessionId == null) {
      return null;
    }
    return (Session) redisTemplate.opsForValue().get(sessionId);
  }
 
  public long getExpireTime() {
    return expireTime;
  }
 
  public void setExpireTime(long expireTime) {
    this.expireTime = expireTime;
  }
 
  public RedisTemplate getRedisTemplate() {
    return redisTemplate;
  }
 
  public void setRedisTemplate(RedisTemplate redisTemplate) {
    this.redisTemplate = redisTemplate;
  }
}

SessionDao實現完了之后,我們就需要將SessionDao加入SessionManager中了,代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
@Bean
 public DefaultWebSessionManager configWebSessionManager(){
   DefaultWebSessionManager manager = new DefaultWebSessionManager();
   manager.setCacheManager(cacheManager);// 加入緩存管理器
   manager.setSessionDAO(sessionDao);// 設置SessionDao
   manager.setDeleteInvalidSessions(true);// 刪除過期的session
   manager.setGlobalSessionTimeout(sessionDao.getExpireTime());// 設置全局session超時時間
   manager.setSessionValidationSchedulerEnabled(true);// 是否定時檢查session
    
   return manager;
 }

最后一步就是將SessionManager配置到SecurityManager中了

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Bean
  public SecurityManager securityManager(DefaultWebSessionManager webSessionManager) {
    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
    // 設置realm.
    securityManager.setRealm(myShiroRealm());
 
    // 注入緩存管理器;
    securityManager.setCacheManager(cacheManager);// 這個如果執行多次,也是同樣的一個對象;
     
    // session管理器
    securityManager.setSessionManager(webSessionManager);
     
    //注入記住我管理器;
    securityManager.setRememberMeManager(rememberMeManager());
    return securityManager;
  }

測試結果如下:

==============doReadSession================= 
==============doReadSession================= 
==============doReadSession================= 
==============doReadSession================= 
==============doReadSession================= 
==============doReadSession================= 
==============doReadSession================= 
==============doReadSession================= 
==============doReadSession================= 
==============doReadSession================= 
==============doReadSession================= 
==============doReadSession================= 
===============update================ 
==============doReadSession================= 
==============doReadSession================= 
===============update================ 
==============doReadSession================= 
==============doReadSession================= 
==============doReadSession================= 
權限配置-->MyShiroRealm.doGetAuthorizationInfo() 
==============doReadSession================= 

我們會發現,當一個頁面中存在多個資源的時候,會不停的調用doReadSession,update方法來讀取和更新session,目前這個問題還沒有想到比較好的解決方案。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/liuchuanhong1/article/details/76690682

延伸 · 閱讀

精彩推薦
  • JAVA教程詳解java 客戶端鏈接不上redis解決方案

    詳解java 客戶端鏈接不上redis解決方案

    這篇文章主要介紹了詳解java 客戶端鏈接不上redis解決方案,具有一定的參考價值,感興趣的小伙伴們可以參考一下。...

    liuxg20135682020-07-22
  • JAVA教程Java中JSONObject與JSONArray的使用區別詳解

    Java中JSONObject與JSONArray的使用區別詳解

    這篇文章主要介紹了Java中JSONObject與JSONArray的使用區別詳解,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    愛生活,愛編程4772021-01-30
  • JAVA教程區分Java的方法覆蓋與變量覆蓋

    區分Java的方法覆蓋與變量覆蓋

    作為初學者2個比較容易出錯的定義,方法覆蓋和變量覆蓋。下面我們一起來看看作者如何去探討Java的方法覆蓋和變量覆蓋。 ...

    lijiao2512020-01-05
  • JAVA教程Java中使用json與前臺Ajax數據交互的方法

    Java中使用json與前臺Ajax數據交互的方法

    這篇文章主要為大家詳細介紹了Java中使用json與前臺Ajax數據交互的方法,分享Ajax獲取顯示Json數據的一種方法,感興趣的小伙伴們可以參考一下 ...

    海潛2562020-05-14
  • JAVA教程idea tomcat亂碼問題的解決及相關設置的步驟

    idea tomcat亂碼問題的解決及相關設置的步驟

    這篇文章主要介紹了idea tomcat亂碼問題的解決及相關設置的步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需...

    行而思5372020-07-29
  • JAVA教程Java集合繼承體系詳解

    Java集合繼承體系詳解

    這篇文章主要為大家詳細介紹了Java集合繼承體系,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    snow_76252021-01-29
  • JAVA教程詳解idea maven項目如何使用lib下得jar包

    詳解idea maven項目如何使用lib下得jar包

    這篇文章主要介紹了詳解idea maven項目如何使用lib下得jar包,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    StartGala5362021-02-26
  • JAVA教程protobuf與json轉換小結

    protobuf與json轉換小結

    protobuf對象不能直接使用jsonlib去轉,因為protobuf生成的對象的get方法返回的類型有byte[],而只有String類型可以作為json的key,protobuf提供方法進行轉換...

    涂墨留香5232020-11-28
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 北条麻妃在线一区二区免费播放 | 亚洲视频中文字幕 | 亚洲一本 | 午夜视频在线观看网站 | 九九视频在线 | 成人午夜毛片 | 精品国产成人 | 国产精品18久久久久久久久 | 午夜视频在线 | 国产噜噜噜噜噜久久久久久久久 | 狼人综合av | 久久久久久久久久久久国产精品 | 亚洲自拍另类 | 日本少妇bbbb爽爽bbb美 | av黄色网| 国产一区二区三区四区五区密私 | 久久综合九色综合网站 | 久草视频免费在线播放 | 高清成人 | 在线亚洲一区 | 成人av一级 | 隔壁老王国产在线精品 | 91麻豆蜜桃一区二区三区 | 国产精品欧美一区二区三区 | 亚洲精品成人av | 国产精品久久久久久久天堂 | 久久91久久久久麻豆精品 | 天堂资源在线 | 国产精品3区 | 国产在线精品一区 | 色综合中文 | 亚洲国产精品久久人人爱 | 国产精品无码久久久久 | 久久99久 | 综合中文字幕 | 美女视频一区二区三区 | 成人国产免费视频 | 亚洲国产精品久久久久 | 处女一级片 | 亚洲激情精品 | 欧美一级淫片丝袜脚交 |