很高兴CAS系列帮助到了不少小伙伴,有不少小伙伴加QQ跟我交流
有个比较普遍的问题是大家不知道怎么把注册,修改密码等相关的功能嵌入CAS,这篇博客统一解答下,有些关于spring的内容是我查找资料结合自身理解的,不一定准确,但是方法一定是我验证可以的
顺手贴上CAS 5.2.X官方文档:https://apereo.github.io/cas/5.2.x/index.html
hugeo的CAS系列:https://blog.csdn.net/u010588262/article/category/7548325
DEMO下载:
part1: https://download.csdn.net/download/u010588262/10327539
part2:https://download.csdn.net/download/u010588262/10372828
part1是前面几篇博客的完整项目,不包含这篇的内容
par2是在part1的基础上的main文件夹,包含此篇的代码
正文
CAS框架本身的功能是用来做登录验证的,其中用到了spring webflow,感兴趣的伙伴可以查找相关资料了解一下,可以对CAS验证的流程有个了解:
注册,修改密码等周边功能CAS是不管的,但是我们可以在CAS服务器端的基础上增加自己需要的功能,maver overlay不就是用来做这个的吗,所以我们的大致思路是,把CAS自带的登录页面修改掉,上面增加注册,修改密码的按钮,指向咱们自己写的controller就行了。
重要提醒:有个需要格外关注的地方是,大家请一定按照我第一篇博客(https://blog.csdn.net/u010588262/article/details/79741626)的方法把CAS本身的lib全部添加到开发项目中,maven里不要有spring boot相关的依赖了,因为CAS的lib里就有spring boot核心的包,已经够我们开发了,CAS的lib里没有的包我们再添加依赖。否则打包时开放项目又打进去一份springboot的包,启动时就会报bean重复的问题(在两边版本不一致的情况下),所以保险起见就是pom中不要有springboot的依赖。
有朋友自己写了controller但是启动之后访问时总是404错误,这是因为springboot根本没有扫描咱们自己的包,可以发现CAS打好包之后里面是没有web.xml文件的,就可以知道肯定是有类继承了SpringBootServletInitializer
,找一下发现了CasWebApplicationServletInitializer
这里面就看到启动类了,最重要的@SpringBootApplication
也在这上面:
到这里很多小伙伴应该知道了,@SpringBootApplication
的功能不赘述了,所以spring默认是到org.apereo.cas.web
下寻找component,service,controller,configuration等组件的,所以在咱们自己的包下面使用这些注解spring是扫描不到的,你要做的就是
1. 增加一个配置类:
2. 将此配置类配置到spring.factories中,否则spring不管它的哟
3. 写个简单的controller试一下吧
4. 如果看不到效果,去你的target文件夹下看一下打包后的文件是不是真的改过来了,我测试的时候第一次没反应,看target下的spring.factories文件里没加上我的配置类,clean一下重新打包即可。
以上是基础工作
以下是实例
1. 修改登录页面样式+注册
官方文档:https://apereo.github.io/cas/5.2.x/installation/User-Interface-Customization-Themes.html
这块我们要回头说一下客户端注册json文件了,这块不明白的看一下客户端这篇的博客:
https://blog.csdn.net/u010588262/article/details/79806923
简单来说就是每个要使用单点登录的客户端都要在服务端有个配置文件:
这些文件固定在service文件夹下,文件生效要在application.properties中添加:
#开启识别json文件,默认false
cas.serviceRegistry.initFromJson=true
文件各字段含义:
1. @class
固定的,没研究含义
2. serviceId
通过正则表达式匹配客户端过来的url
3. evaluationOrder
,如果多个文件的正则都匹配了咋办,哪个Order小用哪个
4. name desc id
不说了
5. 细心的小伙伴发现了这里比原来的博客里多了一个theme
,就是控制这个客户端过来的登录页面样式了,可以支持不同客户端不同登录页面,很人性化。
在application.properties中配置默认默认主题:
# 默认主题
cas.theme.defaultThemeName=hugeo
下面开始创建咱们自己的登录页面吧,涉及到以下几个文件:
因为我们在json文件中配置的主题名称是hugeo,所以在templates下面创建同名hugeo文件夹,文件夹里面是casLoginView.html,这个名称也是固定的:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<title th:text="${#themes.code('demo.pageTitle')}"></title>
<link rel="stylesheet" th:href="@{${#themes.code('hugeo.css.file')}}"/>
<script th:src="@{${#themes.code('hugeo.js.file')}}"></script>
</head>
<body>
<h1 th:text="${#themes.code('demo.pageTitle')}&