1. 程式人生 > >單點登入CAS使用記(八):使用maven的overlay實現無侵入的改造CAS

單點登入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使用記系列: