前期在学习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使用记系列:

单点登录CAS使用记(八):使用maven的overlay实现无侵入的改造CAS的更多相关文章

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

    知识点: SSO:单点登录(Single Sign On),是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. CAS:耶 ...

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

    CAS-Server下载地址:https://www.apereo.org/projects/cas/download-cas CAS-Client下载地址:http://developer.jasi ...

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

    问题: CAS自带的用户验证逻辑太过简单,如何像正常网站一样,通过验证DB中的用户数据,来验证用户以及密码的合法性呢? 方案1:CAS默认的JDBC扩展方案: CAS自带了两种简单的通过JDBC方式验 ...

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

    CAS默认的登录页面样式如下,只有用户名与密码两项验证项目. 现在需要为首页登录加上验证码功能. 第一步:首页对默认登录页面的样式进行了调整,使其看上去还算美观. 在页面上加上了验证码项目. 第二步: ...

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

    一.问题在哪? 在配置cas-client中,有这么一段配置: <filter> <filter-name>CAS Filter</filter-name> < ...

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

    单点登出基本上没有啥配置 直接在原来logout的时候,重定向到Cas-Server的logout方法 @RequestSecurity @RequestMapping(value = "l ...

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

    我的预想情况 一般情况下,当用户登录一个站点后,如果长时间没有发生任何动作,当用户再次点击时,会被强制登出并且跳转到登录页面, 提醒用户重新登录.现在我已经为站点整合了CAS,并且已经实现了单点登录以 ...

  8. cas sso单点登录系列7_ 单点登录cas常见问题系列汇总

    转:http://blog.csdn.net/matthewei6/article/details/50709252 单点登录cas常见问题(一) - 子系统是否还要做session处理?单点登录ca ...

  9. Cas 使用maven的overlay搭建开发环境 (二)

    关于cas-server的安装.部署网上教程很多.但是使用Cas,只通过部署时修改配置是无法满足产品需求的,因此需要我们改造Cas.本文讲解如何使用maven的overlay无侵入的改造Cas. 什么 ...

随机推荐

  1. javascript book

    我们很欣喜地看到,在设计模式领域,<JavaScript设计模式>(JavaScript Design Patterns)和<JavaScript编程模式>(JavaScrip ...

  2. 复位应答ATR的基本结构和数据元

    根据定义,复位应答是一系列字节的值,这些字节是由卡作为对复位命令的响应发送给接口设备的 ,在I/O电路上,每个字节在一个异步字符中传输.每个成功的复位操作,都会导致I/O上的一个初始字符TS,TS后面 ...

  3. Delphi新语法

    http://www.cnblogs.com/hnxxcxg/category/456344.html

  4. OAuth2的学习小结

    Spring Security json Access maven OAUTH2核心参数说明 grant_type参数说明表格: grant_type 说明 authorization_code 标准 ...

  5. 使用XSLT实现Word下载

    Xslt是Extensible Stylesheet Language Transformations的缩写,用来将XML 文档转换到其它文档类型.XSLT的使用包括两个输入文件: – 包含实际数据的 ...

  6. Something broke! (Error 500)——reviewboard

    Something broke! (Error 500) 1.什么时候会出现? 不清楚,出现过几次 2.解决手段及方法: 更改/www_rb/conf/settings_local.py文件,将DEB ...

  7. ngnix 一 入门指南

    翻译自:ngnix--Beginner Guide ##ngnix入门指南 本指南给出了nginx的基本介绍,并介绍了可以使用它的完成一些简单任务. 它假定nginx已经安装在读者的机器上. 如果不是 ...

  8. Demon_游戏登录界面(具备账号密码输入功能)

    using UnityEngine; using System.Collections; using UnityEngine.UI;// public class LoginButton : Mono ...

  9. SKAction类

    继承自 NSObject 符合 NSCodingNSCopyingNSObject(NSObject) 框架  /System/Library/Frameworks/SpriteKit.framewo ...

  10. 通过分析 JDK 源代码研究 Hash 存储机制--转载

    通过 HashMap.HashSet 的源代码分析其 Hash 存储机制 集合和引用 就像引用类型的数组一样,当我们把 Java 对象放入数组之时,并不是真正的把 Java 对象放入数组中,只是把对象 ...