你的位置:首页 > Java教程

[Java教程]单点登录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.

    <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.

  <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.

cas-servlet.

deployerConfigContext.

login-webflow.

web.

同样的,我把这些文件全部复制到新项目中,目录与原项目保持一致。

 

步骤四:启动my-cas-server测试效果

启动后发现,与之前效果完全一致,可以正常访问,也可以正常的进行认证。

 

扩展:

采用overlay方式后,不仅可以不用修改源码进行CAS改造,而且你还会发现,编码的自由度大大增加了,不用再受限于原有项目的种种约束。

例如,我想要美化一下登录页面,原有的太过简单了。

我完全可以像平时开发一下,重新绘制一个登录页面,然后在配置文件中替换掉默认登录页面就可以了。

然后修改一下default_views.properties

### Login view (/login)casLoginView.(class)=org.springframework.web.servlet.view.JstlViewcasLoginView.url=/WEB-INF/view/jsp/default/ui/casLoginView.jsp

 

-->

### Login view (/login)casLoginView.(class)=org.springframework.web.servlet.view.JstlViewcasLoginView.url=/WEB-INF/jsp/login.jsp

 

重新启动,运行。

 


单点登录CAS使用记系列:

  • 单点登录CAS使用记(一):前期准备以及为CAS-Server配置SSL协议

  • 单点登录CAS使用记(二):部署CAS服务器以及客户端

  • 单点登录CAS使用记(三):实现自定义验证用户登录

  • 单点登录CAS使用记(四):为登录页面加上验证码

  • 单点登录CAS使用记(五):cas-client不拦截静态资源以及无需登录的请求。

  • 单点登录CAS使用记(六):单点登出、单点注销

  • 单点登录CAS使用记(七):关于服务器超时以及客户端超时的分析

  • 单点登录CAS使用记(八):使用maven的overlay实现无侵入的改造CAS