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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM