單點登入CAS使用記(八):使用maven的overlay實現無侵入的改造CAS
前期在學習CAS部署的過程中,都是網上各種教程,各種方案不停的嘗試。
期間各種侵入改原始碼,時間久了,改了哪個檔案,改了哪段配置,增加了哪段程式碼,都有可能混淆不清了。
而且最大的問題是,萬一換個人來維護或者哪天需要升級CAS版本,從何下手?
還好,maven的overlay的功能,可以幫助我解決這個問題。
什麼是maven的overlay?
overlay可以把多個專案war合併成為一個專案,並且如果專案存在同名檔案,那麼主專案中的檔案將覆蓋掉其他專案的同名檔案。
於是,我就可以完全不修改cas-server-webapp的原有程式碼實現CAS了。
步驟一:新建my-cas-server
預設的CAS是以cas-server-webapp為主專案,使用者登入認證入口、使用者登入頁面、各種主配置檔案都包含在此專案中。
現在,我把新建的my-cas-server作為我的主專案,而把cas-server-core專案作為從屬專案匯入主專案中。
my-cas-server的pom.xml
<dependency> <groupId>org.jasig.cas</groupId> <artifactId>cas-server-webapp</artifactId><version>3.4.11</version> <type>war</type> <scope>runtime</scope> </dependency>
步驟二:設定overlays
配置overlay用於覆蓋從屬專案的同名檔案,意思就是說,如果我主專案中存在與cas-server-webapp專案相同目錄並且相同名稱的檔案,已主專案的為準,也就是覆蓋從屬專案的檔案。
在my-cas-server的pom.xml中新增:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <overlays> <overlay> <groupId>org.jasig.cas</groupId> <artifactId>cas-server-webapp</artifactId> </overlay> </overlays> </configuration> </plugin> </plugins> </build>
步驟三:拷貝同名檔案
把之前修改過的cas-server-webapp的原始碼以及配置檔案,全都列舉出來,並且拷貝到my-cas-server的相同目錄下。
例如:之前我改過了這麼些程式碼(部分程式碼)
UsernamePasswordCredentials.java
AuthenticationViaFormAction.java
webapp/WEB-INF/
|--classes
|---cas-theme-default.properties
|---default_views.properties
|---messages_zh_CN.properties
|--spring-configuration
|----ticketRegistry.xml
cas-servlet.xml
deployerConfigContext.xml
login-webflow.xml
web.xml
同樣的,我把這些檔案全部複製到新專案中,目錄與原專案保持一致。
步驟四:啟動my-cas-server測試效果
啟動後發現,與之前效果完全一致,可以正常訪問,也可以正常的進行認證。
擴充套件:
採用overlay方式後,不僅可以不用修改原始碼進行CAS改造,而且你還會發現,編碼的自由度大大增加了,不用再受限於原有專案的種種約束。
例如,我想要美化一下登入頁面,原有的太過簡單了。
我完全可以像平時開發一下,重新繪製一個登入頁面,然後在配置檔案中替換掉預設登入頁面就可以了。
然後修改一下default_views.properties
### Login view (/login)
casLoginView.(class)=org.springframework.web.servlet.view.JstlView
casLoginView.url=/WEB-INF/view/jsp/default/ui/casLoginView.jsp
-->
### Login view (/login)
casLoginView.(class)=org.springframework.web.servlet.view.JstlView
casLoginView.url=/WEB-INF/jsp/login.jsp
重新啟動,執行。
單點登入CAS使用記系列: