单点登录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使用记系列:

 

posted @ 2016-04-01 14:59  萝卜兔子  阅读(14075)  评论(1编辑  收藏  举报