情景描述
- 我們使用cas作為單點登錄工具保護所有app
- 但是cas的界面都是默認的,如何修改cas的登錄登出以及登錄登出成功或者失敗的界面樣式呢?
矛盾點
使用cas系統,cas的服務器中已經默認配置好了服務器過程中所需的靜態資源。這固然好,但是造成了想要修改就變得困難起來。如何修改cas的靜態文件成了焦點問題。
cas是什么東西,系統中如何集成cas?
-
sso:單點登錄
- 作用:用戶只需要登錄一次就可以訪問多個相互關聯的應用。
- example:okta。只需要登錄一次,就可以不輸入密碼的登錄任何收錄在okta中的app
- anthor example:不同于onePassword或者lastPass,他們是將不同app的密碼存在數據庫中,登錄哪個app,拿出哪個app的密碼,這樣只要我們記下一個登錄onePassword密碼即可。
-
cas:是一個單點登錄的框架(或者庫),針對web實現單點登錄。以下是系統中整合cas利用cas功能。
- cas客戶端:和系統中的gateway整合在一個服務器。和Spring Security整合在一起使用。
- 客戶端原理: 所有請求發往gateway,spring Security具有對請求進行過濾的功能,因此,可以對請求根據url、head或者其他篩選。滿足條件的請求可以發往對應的app。但是不滿足的請求(比如沒有登錄沒有sT,TGT)被重定向到cas的服務器。
- cas服務器:單獨的一個服務器,專門用來做用戶身份認證(類似于一個專門的登錄登出服務器)
- 服務器原理:當請求發來服務器,驗證完身份,保證用戶身份沒問題,服務器產生sT(類似于session存放在服務器作為身份驗證)。給請求帶上TGT類似于一種登錄成功憑證。然后跳轉到對應的app。
- 具體的過程參見鏈接
- cas客戶端:和系統中的gateway整合在一個服務器。和Spring Security整合在一起使用。
cas的服務端是如何做成的?
- 查看網上說法就類似于下載一個app,下載一個壓縮包,解壓后啟動在某個端口,cas的服務器就啟動了。
cas html頁面在哪里呢?
- 首先我們知道了cas的服務器端
- 因此不論靜態文件還是功能都是由cas的服務器提供的。
- 所以如果要修改靜態必然是到cas的服務器然后找到resource文件夾修改。
- 然而resource文件夾中并沒有我想要修改的html頁面
- 因此可以確定,很多HTML頁面都是默認存放在cad服務器中,如何想要修改必須創建同名html文件覆蓋他
那么如何修改想要修改的頁面呢?
- 首先你需要訪問github找到你要修改的html文件的名字。
- 我認為可以通過頁面找到標簽的類名,然后去倉庫中search類名
- 然后找到其中包含這個類名的文件,對比找到。
- 然后在本地的cas服務器中創建同名html文件,就可以隨意創建修改啦。
cas中html的寫法好神奇
- 所有標簽都是通過
th:**="#{**}"
來設置屬性的。- ex:
<h2 th:utext="#{screen.logout.header}"/>
說明h2的utext(也就是內容)是變量#{screen.logout.header}
-
<a th:href="#{userCenter.home.url}">點此重新登錄進入學習中心</a>
也就是a的href屬性是#{userCenter.home.url}變量。
- ex:
- 那么#{**} **變量都是定義在
resourecs/custom_messages.properties
使用到的變量都在這文件中定義即可訪問到 - 所有的html頁面放在
resources/template
下
反思
- 對于cas,一直知道項目上使用它,之前嘗試自己搞一個覺得好多配置加上對spring的不了解就卻步了。但是即使寫不出來,也應該搞清楚原理,這樣完善項目功能也不會太費力。沒有及時去了解,必須反思。
Action
- 以后改變策略,聽到新的概念,首先第一步先淺薄的了解5w1h然后再根據能力和時間以及需求衡量是否要自己實現。也就是從大到細先宏觀了解,要不沒有辦法在寫代碼的時候腦子形成這個新工具的概念架構