前期在學習CAS部署的過程中,都是網上各種教程,各種方案不停的嘗試。
期間各種侵入改源碼,時間久了,改了哪個文件,改了哪段配置,增加了哪段代碼,都有可能混淆不清了。
而且最大的問題是,萬一換個人來維護或者哪天需要升級CAS版本,從何下手?
還好,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使用記系列: