单点登录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使用记系列:
单点登录CAS使用记(一):前期准备以及为CAS-Server配置SSL协议
单点登录CAS使用记(二):部署CAS服务器以及客户端
单点登录CAS使用记(三):实现自定义验证用户登录
单点登录CAS使用记(四):为登录页面加上验证码
单点登录CAS使用记(五):cas-client不拦截静态资源以及无需登录的请求。
单点登录CAS使用记(六):单点登出、单点注销
单点登录CAS使用记(七):关于服务器超时以及客户端超时的分析
单点登录CAS使用记(八):使用maven的overlay实现无侵入的改造CAS
单点登录CAS使用记(八):使用maven的overlay实现无侵入的改造CAS的更多相关文章
- 单点登录CAS使用记(一):前期准备以及为CAS-Server配置SSL协议
知识点: SSO:单点登录(Single Sign On),是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. CAS:耶 ...
- 单点登录CAS使用记(二):部署CAS服务器以及客户端
CAS-Server下载地址:https://www.apereo.org/projects/cas/download-cas CAS-Client下载地址:http://developer.jasi ...
- 单点登录CAS使用记(三):实现自定义验证用户登录
问题: CAS自带的用户验证逻辑太过简单,如何像正常网站一样,通过验证DB中的用户数据,来验证用户以及密码的合法性呢? 方案1:CAS默认的JDBC扩展方案: CAS自带了两种简单的通过JDBC方式验 ...
- 单点登录CAS使用记(四):为登录页面加上验证码
CAS默认的登录页面样式如下,只有用户名与密码两项验证项目. 现在需要为首页登录加上验证码功能. 第一步:首页对默认登录页面的样式进行了调整,使其看上去还算美观. 在页面上加上了验证码项目. 第二步: ...
- 单点登录CAS使用记(五):cas-client不拦截静态资源以及无需登录的请求。
一.问题在哪? 在配置cas-client中,有这么一段配置: <filter> <filter-name>CAS Filter</filter-name> < ...
- 单点登录CAS使用记(六):单点登出、单点注销
单点登出基本上没有啥配置 直接在原来logout的时候,重定向到Cas-Server的logout方法 @RequestSecurity @RequestMapping(value = "l ...
- 单点登录CAS使用记(七):关于服务器超时以及客户端超时的分析
我的预想情况 一般情况下,当用户登录一个站点后,如果长时间没有发生任何动作,当用户再次点击时,会被强制登出并且跳转到登录页面, 提醒用户重新登录.现在我已经为站点整合了CAS,并且已经实现了单点登录以 ...
- cas sso单点登录系列7_ 单点登录cas常见问题系列汇总
转:http://blog.csdn.net/matthewei6/article/details/50709252 单点登录cas常见问题(一) - 子系统是否还要做session处理?单点登录ca ...
- Cas 使用maven的overlay搭建开发环境 (二)
关于cas-server的安装.部署网上教程很多.但是使用Cas,只通过部署时修改配置是无法满足产品需求的,因此需要我们改造Cas.本文讲解如何使用maven的overlay无侵入的改造Cas. 什么 ...
随机推荐
- ExtJS5_自定义菜单2
这一节来定义另外三种类型的菜单类.首先定义菜单按钮类.文件放于app/view/main/region目录下面,文件名为ButtonMainMenu.js. /** * 显示在顶部的按钮菜单,可以切换 ...
- oracle中的日期加减法
--加法 ) from dual; --加1年 ) from dual; --加1月 ,'yyyy-mm-dd HH24:MI:SS') from dual; --加1星期 ,'yyyy-mm-dd ...
- KEIL C51高级编程
第一节 绝对地址访问C51提供了三种访问绝对地址的方法: 1. 绝对宏:在程序中,用“#include”即可使用其中定义的宏来访问绝对地址,包括:CBYTE.XBYTE.PWORD.DBYTE.CWO ...
- Qt自定义事件的实现(军队真正干活,但要增加监军,大平台通知事件,事件内容自定义)
初学Qt,用了Qt自带的事件,然后想怎么才能定义自己的事件呢?又如何使用自定义事件呢?看了篇文章,说先要子类化QEvent,然后定义自己的QEvent::Type,然后重写QWidget::event ...
- OpenWrt+nginx+php安装discuz
下面这个图片是本次的硬件资源:一个无线路由器的开发板,一个8G的u盘,一条手机的数据线(可以作为串口和供电使用),一条网线,一个USB Hub. <ignore_js_op> ...
- Buy the Ticket HDU 1133 递推+大数
题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=1133 题目大意: 有m+n个人去买电影票,每张电影票50元, m个人是只有50元一张的, n个人 ...
- Silverlight 中 读取XML文件
一:xml文件 二:后台代码 private void ReadXml() { List<TreeViewItem> nodes = new List<TreeViewItem> ...
- radio 和checkbox与文字对齐问题
今天在项目中遇到radio和文字对齐问题(ie不明显,火狐和google比较明显),在此记录. 1.浏览器默认文字大小为14px,因而当文字字体为14px时radio和checkbox与文字对齐良好, ...
- cf590B Chip 'n Dale Rescue Rangers
B. Chip 'n Dale Rescue Rangers time limit per test 1 second memory limit per test 256 megabytes inpu ...
- ubuntu下QT输出程序控制台界面难看的解决方法
这几天在ubuntu下装了QT5,但输出程序界面后,简直无法入目 于是,随便乱找后,终于找到解决方法 打开选项 在终端那行改下就行