CAS 登入後返回更多使用者資訊

2021-07-03 07:31:18 字數 2802 閱讀 9094

從cas server

登入成功後,預設只能從

casclient

得到使用者名稱。但程式中也可能遇到需要得到更多如姓名,手機號,email等更多使用者資訊的情況。

cas client

拿到使用者名稱後再到資料庫中查詢,的確可以得到關於該使用者的更多資訊。

但是如果使用者登入成功後,直接從

cas server

返回給casclient

使用者的詳細資訊,這也是乙個不錯的做法。這個好處,尤其是在分布式中得以彰顯,

cas server

可以把使用者資訊傳遞給各個應用系統,如果是上面那種做法,那麼各個系統得到使用者名稱後,都得去資料庫中查詢一遍,無疑是一件重複性工作。

文章中 cas 基礎環境:

cas-server-3.5.2    

cas-client-3.2.1

首先,你需要到web-inf目錄找到deployerconfigcontext.xml檔案,同時配置attributerepository 如下: 

其中:切記:查詢出來的欄位名中間不能使用 _ (

下劃線)

,否則獲取不到資料,如

cell_phone 

需要設定別名為

cellphone.

對應資料庫字段,

value

對應客戶端獲取引數。

如果要組裝多個查詢條件,需要加上下面這個,預設為

and or

也是在 deployerconfigcontext.xml 中,找到credentialstoprincipalresolvers,為usernamepasswordcredentialstoprincipalresolver 注入 attributerepository,那麼attributerepository 就會被觸發並通過此類進行解析,紅色為新添部分。

修改 deployerconfigcontext.xml 中的 org.jasig.cas.services.inmemoryserviceregistrydaoimpl的 屬性 registeredservices。修改 registeredservices  

的allowedattributes

屬性值,將需要在客戶端顯示的列值加上。

// 客戶端需要使用的物件的屬性名稱

uidemail

mobile

birth

ismarry

userno

login_account

// 客戶端需要使用的物件的屬性名稱

uidemail

mobile

birth

ismarry

userno

login_account

【提示】網上說此bean中的ignoreattributes屬性預設是不新增使用者資訊

,檢視了

cas 3.5.2

版本的abstractregisteredservice 

原始碼後,發現其預設值就是

false

,即:新增屬性後,客戶端就可見了

四、配置與客戶端互動的xml資訊

修改web-inf/view/jsp/protocol/2.0/casservicevalidationsuccess.jsp。在server驗證成功後,這個頁面負責生成與客戶端互動的xml資訊,在預設的casservicevalidationsuccess.jsp中,只包括使用者名稱,並不提供其他的屬性資訊,因此需要對頁面進行擴充套件,如下,紅色為新新增部分 

$

0}">

$$1}">$

通過完成上面四個步驟的配置後,server端的工作就完成了,那麼如何在客戶端獲取這些資訊呢?下面進行說明:

attributeprincipal principal = (attributeprincipal)request.getuserprincipal();

map attributes = principal.getattributes();

string email=attributes .get("email");

attributeprincipal principal = (attributeprincipal)request.getuserprincipal();

map attributes = principal.getattributes();

string email=attributes .get("email");

和shiro整合後,因為cas client將casfilter交給了shirofilter,所以在通過shiro物件時可以使用者資訊的:

subject subject = securityutils.getsubject();

list list = subject.getprincipals().aslist();

string name = (string) list.get(0);

mapinfo = (map)list.get(1);

string age = info.get("age").tostring();

CAS 14 CAS 更多使用者資訊

將更多使用者資訊寫入到service驗證返回訊息中 tomcat版本 tomcat 8.0.29 jdk版本 jdk1.8.0 65 cas版本 4.1.3 cas4.1.3 4.x還在開發過程中不是很穩定,迭代比較快,也會有些bug cas client 3.4.1 ehcache版本 2.10....

casServer單點登入返回更多使用者資訊正確配置

網上很多關於配置casserver的文章,很詳細,但是想配置出自己合適的版本會出現好多問題。第一 版本 我用的是cas server core 3.3.3.jar cas client core 3.2.1.jar這個版本 deployerconfigcontext.xml應該這樣設定返回,建構函式...

vb實現多使用者登入

利用vb實現多使用者登入,主要是將vb與資料庫實現鏈結,這個問題在作品展中我們的軟體 天天跡錄 的登入時用到,但是當時自己只是知道有這麼個功能,但是那些 的含義並不明白,在3個月後的我又有機會接觸到它,現在敲這特別熟悉,現在也明白了其中的好多問題!利用資料庫儲存使用者和密碼,提高了軟體執行的速度!而...