shiro分布式session共享

2021-08-28 00:15:47 字數 1569 閱讀 4933

使用nginx+tomcat進行負載均衡時,希望使用輪詢方式進行負載。但是如果使用輪詢方式的話,可能會訪問不同的tomcat,此時如果不進行session共享,則相當於是乙個新的session。就比如現有系統都是需要認證登入的系統,如果沒有session共享,則會導致使用者退出登入。

當我們使用了nginx做專案集群以後,就會出現乙個很嚴重的問題,那就是:tomcat集群之間如何實現session共享的問題,如果這個問題不解決,就會出現登陸過後再次請求資源依舊需要登陸的問題。session共享有多種方案,主要說session存入redis,其實也挺簡單的

shiro-redis.jar不會讓你寫任何**,主要寫配置檔案就好,session怎麼存入redis的根本不用寫,剛開始沒用shiro-redis這個jar,用的是自己的實現

實現方式:

自己實現乙個redissessiondao extends enterprisecachesessiondao

重寫了docreate(),readsession(),doreadsession(),doupdate(),dodelete()通過redis讀寫session的方法

反正挺麻煩的,還會報一些錯,比如序列化和反序列化這些,後面看到shiro-redis就直接換了

新增依賴

org.crazycake

shiro-redis

2.4.2.1-release

redis.clients

jedis

2.7.2

shiro-redis.xml

<?xml version="1.0" encoding="utf-8"?>		

/login.jsp = anon

/layui/** = anon

/jquery/** = anon

/images/** = anon

/js/** = anon

/assets/** = anon

/verifycode.do=anon

/logout.do = logout

/**=authc

redis.properties

#sessionid存入cookie名字

redismanager.sessionname=sid

#ipredismanager.host=127.0.0.1

#埠redismanager.port=6379

#redis key過期時間

redismanager.timeout=1800000

#存入redis key的字首

redismanager.prefix=shiro_session_

#redis 密碼

redismanager.password=root

配置好就可以了

session存入redis中

最後部署兩個tomcat上,配置好nginx就ok

分布式session共享

為什麼會出現session共享問題?客戶端與伺服器互動時會產生唯一的sessionid用於標記使用者,但是在分布式架構中,如果還是採用 session 的方式,使用者發起請求,通過 nginx 做請求 時,並不知道是 到伺服器1還是伺服器2,所以就會出現session共享問題。今天主要記錄使用 sp...

session分布式處理

在支援session複製的web伺服器上,通過修改web伺服器的配置,可以實現將session同步到其他web伺服器上,達到每個web伺服器上都儲存一致的session。1.優點 上不需要做支援和修改。2.缺點 需要依賴支援的web伺服器,一旦更換成不支援的web伺服器就不能使用了,在資料量很大的情...

分布式session共享

什麼是session 伺服器為每個使用者建立乙個會話,儲存使用者的相關資訊,以便多次請求能夠定位到同乙個上下文。當使用者請求來自應用程式的 web 頁時,如果該使用者還沒有會話,則 web 伺服器將自動建立乙個 session 物件。當會話過期或被放棄後,伺服器將終止該會話並銷毀。分布式sessio...