CAS自定義登入

2021-07-16 08:17:20 字數 2232 閱讀 3275

cas是單點登入系統(sso)的一種,在多個應用系統中,只需要登入一次,就可以訪問所有的系統。

修改login-webflow.xml檔案,通過加入引數等方式,走不同的state,以獲取login ticket(lt),在submit的時候,帶上該lt,走正常的登入流程。且稱為lt方式。

不走login-webflow,rest介面直接傳入username、password,獲取tgt。且稱為tgt方式。

由於lt存放在cas伺服器本地,因此在集群部署的時候,我在專案中,使用的第二種方式。

cas統一登入頁面的原理是,首先進入頁面時,會獲取到lt和execution,submit的時候,會對該lt進行驗證。因此lt方式的目標是,自定義頁面中,首先也獲取到lt和execution,後續過程和統一的登入頁面基本沒區別。

so, 第一步:獲取到lt和execution。一般如下流程:

webflow中,新增action-state,根據傳入的引數,判斷走自定義的流程分支;

自定義流程分支中,要新增view-state及對應jsp頁面,通過jsp頁面做response返回。如:<%out.print(「json string」)%>

需要注意的是,此處如果是web端自定義登入頁面,會有跨域問題。因此一般通過jsonp方式或iframe等,本人對前端不是太熟悉,不多提。

第一步獲取lt後,應該能正常登入了。後續過程和統一的登入頁面剛說基本沒區別,但還是稍稍有區別:登入失敗情況的跳轉。

so,第二步:修改登入失敗時候的跳**

修改authenticationviaformaction.submit方法,登入驗證失敗的邏輯中,根據request中自定義引數返回不同的內容;

根據上面返回內容,webflow中處理為不同的state,按第一步中同樣的view-state方式,返回錯誤的資訊。

其中1中修改authenticationviaformaction對原有類有侵入,可模仿該類自定義驗證action用於替換,即修改cas-servlet.xml中bean。

參考文章《cas自定義客戶端登入介面》以及《sso cas單點系列之支援web應用跨域登入cas》,兩篇文章中由於專案需要,我只試了獲取lt的一部分。第一篇文章會對cas有比較大的侵入,第二篇則基本不改變原cas類的**,結構上控制的比較好,但我試著一直有重定向問題,時間有限未定位出具體原因,估計是我自己這邊的環境問題。

cas提供restful介面,直接傳入username、password進行驗證後,獲取tgt;後續的請求在引數或者cookie中帶入該tgt,在cas filter中對該tgt進行驗證。

restletservlet-name>

com.noelios.restlet.ext.spring.restletframeworkservletservlet-class>

1load-on-startup>

servlet>

restletservlet-name>

/v1/*url-pattern>

id="root"

class="org.restlet.ext.spring.springrouter">

name="attachments">

key="/tickets">

class="org.restlet.ext.spring.springfinder">

name="createresource"

bean="ticketresource" />

bean>

entry>

map>

property>

bean>

id="ticketresource"

class="org.jasig.cas.integration.restlet.ticketresource"

scope="prototype" />

cas缺省會將login ticket、tgt、service ticket等存放在本地快取concurrenthashmap,因此在分布式部署時會出現驗證失敗的問題。

此時需要考慮改變ticket儲存策略,比如換用redis等共享的快取。此時需要自定義ticketregistry替換defaultticketregistry,然後將bean ticketregistry指向自定義ticketregistry類。

但改了此處後,貌似登入時所用的login ticket存放本地快取的問題仍然無法解決,暫時的解決方案是改變ng的負載均衡策略為hash策略,以保證兩次請求分布到同一臺伺服器。

cas單點登入 自定義登出確認頁面 十五

首先找到casconfirmlogoutview.html casconfirmlogoutview.html在templates的根目錄下面,拷貝該頁面,並貼上到自己專案的相同路徑下面,如下圖 確認退出將結束你的會話,跳轉到登入頁面。你確認退出嗎?casconfirmlogoutview.html...

CAS4 0 4 之自定義登入頁實踐

因最近公司要用到cas登陸而且要使用自定登陸頁面,網路上搜尋了一下cas自定義登陸,比較好的兩篇文章cas 之自定義登入頁實踐和cas 之 跨域 ajax 登入實踐,感覺寫的不錯,但是發現改動的地方很多。而且有些說的不是很詳細。但是思路可以借鑑一下。研究了cas整個登陸流程發現只要獲取 lt 登入令...

Cas5 3 2 服務端 自定義登入介面

第一 專案整體結構 自定義頁面涉及資源全部存放再src main resources 資料夾目錄下 目錄含義 services 配置自定義登入 模板 static 靜態檔案目錄,用於存放js,css 的 templates 模板檔案目錄,用於存放html digipower.properties 存...