Wir wissen, dass Shiro Sitzung über SessionManager verwaltet und der Betrieb der Sitzung über Sessiondao implementiert wird. Standardmäßig implementiert Shiro zwei Sessiondao, nämlich CachingSessiondao und Memorysesiondao. Wenn wir EHCache -Cache verwenden, verwenden wir CachingSessiondao. Wenn der Cache nicht anwendbar ist, wählen wir Speicher-basierte SessionDAO. Wenn wir daher verteilte Sitzungsfreigabe auf der Grundlage von REDIS implementieren möchten, liegt der Fokus darauf, SessionDAO in SessionManager neu zu schreiben. Unser Umschreibcode lautet wie folgt:
Paket com.chhliu.springboot.shiro.cache; importieren java.io.serializable; Import Java.util.Collection; Import Java.util.Concurrent.TimeUnit; import org.apache.shiro.session.session; import org.apache.shiro.session.unnownSesionException; 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.steretype.service; @Service @SuppressWarnings ({"rawttypes", "Unkontrolliert"}) öffentliche Klasse RedisSessionDao erweitert AbstractSessionDao {// Sitzungszeit, Einheit ist Millisekonds private Long Expiretime = 120000; @Autowired private redistemplate redistemplate; // Redis -Betriebsklasse, wenn Sie nicht damit vertraut sind, können Sie sich auf den vorherigen Blog verweisen, der public resionSessionDao () {Super (); } public RedissessionDao (lange Zeit, redistemplate redistemplate) {Super (); this.expiretime = expiretime; this.redistemplate = redistemplate; } @Override // Sitzung öffentlicher void Update (Sitzung) löscht UnbekanntessessionException { System.out.println("===================================================================================== ==========================================================ieben ==========================================================ieben ==========================================================ieben Session.getID () == null) {return; System.out.println("====================================================================================== ==================================================================ieben ==================================================================ieben ==================================================================ieben redistemplate.opsforValue (). GetOperations (). GetactiveSsions () { System.out.println("============================================================================= ===========================================================================================================ieben ===========================================================================================================ieben ===========================================================================================================ieben redistemplate.keys ("*"); System.out.println("==================================================================================================== ================================================================= ================================================================= ================================================================= ================================================================= ================================================================= ================================================================= TimeUnit.Milliseconds); System.out.println("================================================================================================== =======================================================ieben =======================================================ieben =======================================================ieben =======================================================ieben =======================================================ieben ================================================================= } public void setExpiretime (lange Ablaufzeit) {this.expiretime = expiretime; Nachdem SessionDao implementiert ist, müssen wir SessionManager SessionDao hinzufügen. Der Code ist wie folgt:
@Bean public defaultWebSessionManager configWebSessionManager () {defaultWebSessionManager Manager = new DefaultWebSessionManager (); Manager. Manager. } Der letzte Schritt besteht darin, SessionManager für SecurityManager zu konfigurieren
@Bean Public SecurityManager SecurityManager (DefaultWebSessionManager WebSessionManager) {DefaultWebSecurityManager SecurityManager = new DefaultWebSecurityManager (); // Reich setzen. SecurityManager.SetRealm (myshirorealm ()); // Cache -Manager injizieren; SecurityManager.SetCacheManager (CacheManager); // Wenn dies mehrmals ausgeführt wird, ist es dasselbe Objekt. // Session Manager SecurityManager.etSessionManager (WebSessionManager); // Injize erinnere an meinen Manager; SecurityManager.SetRememberMeManager (rememberMeanager ()); Sicherheitsmanager zurückgeben; } Die Testergebnisse sind wie folgt:
==========================================================
==========================================================
==========================================================
==========================================================
==========================================================
==========================================================
==========================================================
==========================================================
==========================================================
==========================================================
==========================================================
==========================================================
==============================================
==========================================================
==========================================================
==============================================
==========================================================
==========================================================
==========================================================
Berechtigungskonfiguration -> myshirorealm.dogetAuthorizationInfo ()
==========================================================
Wir werden feststellen, dass, wenn mehrere Ressourcen auf einer Seite vorhanden sind, DOREADSession- und Update -Methoden ständig aufgerufen werden, um Sitzungen zu lesen und zu aktualisieren. Derzeit wurde für dieses Problem keine bessere Lösung gefunden.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.