cas单点登录-自定义登录界面 / 自定义主题风格(三)
在前面的文章中,介绍了使用cas实现SSO单点登录,静态登录,使用mysql数据库登录。但是在登录时都是跳转到了同一个登录界面。
假设现在我有两个子站点app1.com
,app2.com
. 两个站点使用不同的样式。那该如何操作呢?
一、主题
cas客户端
接入称之为service
,必须经过cas的允许才能进行登录,当然不同的客户端可以做不同的事情,其中包括:
- 自定义主题(各客户端登录页自定义)
- 自定义属性(服务属性(固定)与用户属性(动态))
- 自定义协议
- 自定义登录后跳转方式,跳转路径
- 授权策略(拒绝属性、可登录时间范围限制、等等)
- 拒绝授权模式
- 主题
先介绍下什么叫主题,主题就意味着风格不一,目的就是为了在不同的接入端(service)展示不同的页面,就例如淘宝登录、天猫登录,其中登录点还是一个sso,但淘宝登录卖的广告是淘宝的,而天猫登录卖的广告是天猫的。
简略看完后,会有以下的规范:
- 静态资源(js,css)存放目录为
src/main/resources/static
- html资源存(thymeleaf)放目录为
src/main/resources/templates
- 主题配置文件存放在src/main/resources并且命名为
[theme_name].properties
- 主题页面html存放目录为
src/main/resources/templates/<theme-id>
- 主题渲染流程
官方文档明确说明,登录页渲染文件为casLoginView.html
,那意味我们在主题具体目录下新增改文件并且按照cas要求写那就可以了,最终目的还是获取到对应的配置文件,渲染对应主题的登录页。
- json配置
{
"@class" : "org.apereo.cas.services.RegexRegisteredService",
"serviceId" : "^https://www.example.org",
"name" : "MyTheme",
"theme" : "[theme_name]",
"id" : 1000
}
例如,需求:对所有http://app1.cas.*
开头请求的service
进行允许认证。
在resources/services
下新建文件app1
配置文件app1-10003.json
{
"@class" : "org.apereo.cas.services.RegexRegisteredService",
"serviceId" : "^(https|http)://app1.cas.*",
"name" : "app1",
"id" : 10003,
"theme": "app1",
"description" : "This service definition authorizes all application urls that support HTTPS and IMAPS protocols.",
"evaluationOrder" : 10000
}
** 注意:
json文件名字规则为${name}-${id}.json
,id
必须为json
文件内容id一致
修改 applicantion.properties 配置
#开启识别json文件,默认false
cas.serviceRegistry.initFromJson=true
host文件修改
在系统的hosts文件中添加如下内容,在这里我比较推荐使用SwitchHosts软件来管理hosts文件。
#cas test
#cas server
127.0.0.1 cas.server.com
#cas service1
127.0.0.1 app1.cas.com
#cas service2
127.0.0.1 app2.cas.com
源码
本节内容比前面两节内容稍微有点复杂,可以下载源码进行查看。app1与app2的json、properties、css、登录页面的文件拉取源码进行查看。
cas自定义登录源码