废话不多说,直接进入正题
CAS 版本:5.2.x 采用overlay的方式建的项目。
无状态多节点部署改造主要涉及到两点:
1. 持久化CAS TICKET到共享区域(如数据库、redis等官方提供很多种存储就不一一说明了)
2. 持久化CAS Session (经过验证,可以不做这一步,但是由于我这边的验证码存放到了session中所以还是做了持久化)
参考官方文档我们先做第一点(需准备好redis):
a. 引入mavne依赖包
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-redis-ticket-registry</artifactId>
<version>${cas.version}</version>
</dependency>
b. 配置application.properties文件
cas.ticket.registry.redis.host=localhost
cas.ticket.registry.redis.database=0
cas.ticket.registry.redis.port=6379
cas.ticket.registry.redis.password=111111
cas.ticket.registry.redis.timeout=2000
cas.ticket.registry.redis.useSsl=false
cas.ticket.registry.redis.usePool=true
cas.ticket.registry.redis.pool.max-active=20
cas.ticket.registry.redis.pool.maxIdle=8
cas.ticket.registry.redis.pool.minIdle=0
cas.ticket.registry.redis.pool.maxActive=8
cas.ticket.registry.redis.pool.maxWait=-1
cas.ticket.registry.redis.pool.numTestsPerEvictionRun=0
cas.ticket.registry.redis.pool.softMinEvictableIdleTimeMillis=0
cas.ticket.registry.redis.pool.minEvictableIdleTimeMillis=0
cas.ticket.registry.redis.pool.lifo=true
cas.ticket.registry.redis.pool.fairness=false
cas.ticket.registry.redis.pool.testOnCreate=false
cas.ticket.registry.redis.pool.testOnBorrow=false
cas.ticket.registry.redis.pool.testOnReturn=false
cas.ticket.registry.redis.pool.testWhileIdle=false
#cas.ticket.registry.redis.sentinel.master=mymaster
#cas.ticket.registry.redis.sentinel.nodes[0]=localhost:26377
#cas.ticket.registry.redis.sentinel.nodes[1]=localhost:26378
#cas.ticket.registry.redis.sentinel.nodes[2]=localhost:26379
配置结束。
重启cas 登录之后测试一下,查看redis 里面是不是有CAS_TICKET了。
session存入redis的步骤这里也说一下,跟上面的一个套路。
a. 引入mavne依赖包(spring-session-data-redis和redis.clients.jedis CAS 本身已经有依赖过了不用添加,但是还是检查一下吧-0-)
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-webapp-session-redis</artifactId>
<version>${cas.version}</version>
</dependency>
b. 配置application.properties文件
spring.session.store-type=redis
spring.redis.host=localhost
spring.redis.password=111111
spring.redis.port=6379
配置结束。
重启服务,进入登录页面,进行登录。然后查看redis 就会看到spring session等信息(这些就是session信息)。
开始测试负载均衡,模拟测试其实很简单,登录之后,重新开个浏览器选项卡 输入地址:
localhost:8081/cas 一直刷新,这个时候应该一直是登录状态。然后把服务器重启一下,
等重启好了之后 再次刷新,如果还是登录状态说明 ok 了。
但是..........楼主碰到鬼了,再次刷新竟然回到了登录界面,崩溃....
难道还漏了啥步骤?然后楼主找到一篇文章,得到了一些线索,就去调试源码找到了关键信息(验证Cookie里面的TGC出问题了),就去调试源码,发现果然在解密TGC的时候出错了,然后就琢磨着,突然看到CAS 启动日志里面的关键信息
日志信息
2018-04-19 17:56:52,904 WARN [org.apereo.cas.util.cipher.BaseStringCipherExecutor] - <Secret key for encryption is not defined for [Ticket-granting Cookie]; CAS will attempt to auto-generate the encryption key>
2018-04-19 17:56:52,922 WARN [org.apereo.cas.util.cipher.BaseStringCipherExecutor] - <Generated encryption key [ycQ1-H0PyREa_j53zPz3P_Vem9HHmu5SX7cF4TKZ1RI] of size [256] for [Ticket-granting Cookie]. The generated key MUST be added to CAS settings under setting [cas.tgc.crypto.encryption.key].>
2018-04-19 17:56:52,926 WARN [org.apereo.cas.util.cipher.BaseStringCipherExecutor] - <Secret key for signing is not defined for [Ticket-granting Cookie]. CAS will attempt to auto-generate the signing key>
2018-04-19 17:56:52,927 WARN [org.apereo.cas.util.cipher.BaseStringCipherExecutor] - <Generated signing key [AhSCrTVH_TS5MhsKIvG8pd0JCEbaZpIkS0w_KjO7FB7L19ZiqKRxxng1FITZYQ94hp6waNN__2gle1qTLAaXEA] of size [512] for [Ticket-granting Cookie]. The generated key MUST be added to CAS settings under setting [cas.tgc.crypto.signing.key].>
2018-04-19 17:56:53,573 WARN [org.apereo.cas.util.cipher.BaseBinaryCipherExecutor] - <Secret key for signing is not defined under [cas.webflow.crypto.signing.key]. CAS will attempt to auto-generate the signing key>
2018-04-19 17:56:53,574 WARN [org.apereo.cas.util.cipher.BaseBinaryCipherExecutor] - <Generated signing key [OV9YGw8MvAsY-P1ITGEuR8WONzn_nFE8UoNrEp7AAlqoif7exOH6DZyty5zdQtQqQg5uWp8jESMXTF3MJ8aCfw] of size [512]. The generated key MUST be added to CAS settings under setting [cas.webflow.crypto.signing.key].>
2018-04-19 17:56:53,574 WARN [org.apereo.cas.util.cipher.BaseBinaryCipherExecutor] - <Secret key for encryption is not defined under [cas.webflow.crypto.encryption.key]. CAS will attempt to auto-generate the encryption key>
2018-04-19 17:56:53,585 WARN [org.apereo.cas.util.cipher.BaseBinaryCipherExecutor] - <Generated encryption key [pS0xhWBFegHsZ4zszYYAng] of size [16]. The generated key MUST be added to CAS settings under setting [cas.webflow.crypto.encryption.key].>
可看到有加解密key,如果不配置的话就会随机生成,这样就造成解密TGC不通过。然后就跑到官网一顿乱搜,找到了配置信息。
application.properties文件再增加下面配置信息
###########
#cas.tgc.path=
#cas.tgc.maxAge=-1
#cas.tgc.domain=
#cas.tgc.name=TGC
#cas.tgc.secure=true
#cas.tgc.httpOnly=true
#cas.tgc.rememberMeMaxAge=1209600
cas.tgc.crypto.encryption.key=hWbbMq5UXmw1_2cpyZwOLe7xKDpd8ele9bnsCTxyvDw
cas.tgc.crypto.signing.key=tB5IaWspGdM7lEUAuaChs8LRwOoPBagR8MHyHafwmz1NMkAWTZBS-ojg3v8WbHaCkSFi9zm5tZFjFB_ayOpZQA
cas.tgc.crypto.enabled=true
##########
cas.webflow.crypto.enabled=true
cas.webflow.crypto.signing.key=vaG3YDd2_G0xKLg6M7hHm77vHofIwqtyYNrNhXI5QImc94q7N3xxu0fSoAEVZEO7a_cZNuaNfb-DKivpXbZNGw
cas.webflow.crypto.signing.keySize=512
cas.webflow.crypto.encryption.key=x9qviFJ4n_cnRHGfPy_MeQ
cas.webflow.crypto.encryption.keySize=16
cas.webflow.crypto.alg=AES
重启。再次验证,问题得到解决。
相关链接:
https://blog.csdn.net/cn_yh/article/details/77962467
官方:
https://apereo.github.io/cas/5.2.x/installation/Webflow-Customization-Sessions.html
https://apereo.github.io/cas/5.2.x/installation/Redis-Ticket-Registry.html
学习CAS 5.x版本相关文章推荐:
https://blog.csdn.net/u010475041/article/category/7156505
https://blog.csdn.net/column/details/19553.html
- 大小: 30.8 KB
分享到:
相关推荐
在本文档中,我们将讨论如何通过JPA(Java Persistence API)存储来配置CAS的Ticket共享,以支持负载均衡。 【实现负载均衡】 负载均衡通常通过在多个服务器之间分配网络流量来提高系统的响应时间和可用性。对于...
配置Apache和Tomcat实现请求转发(负载均衡) 配置CAS实现Ticket共享(或复制) 配置Tomcat实现Session复制,这里主要是为了复制Web Flow的flowExecutionKey(CAS使用了Spring Web Flow)
#对 "/Dossm3RabbitMQConsumer/" 启用负载均衡 location /Dossm3RabbitMQConsumer/ { proxy_pass http://localhost:8086; #保留用户真实信息 proxy_set_header X-Real-IP $remote_addr; proxy_set_header ...
8. **故障转移和高可用性**:在生产环境中,考虑部署多台CAS服务器以实现负载均衡和故障转移,提高服务的可用性。 9. **性能优化**:根据实际负载调整CAS的性能设置,如缓存策略、线程池大小等。 10. **安全策略**...
CAS5.3.2Docker 部署方案CAS5.3.2Docker 部署方案CAS5.3.2Docker 部署方案
【标题】"CAS官方提供的例子改造"涉及到的核心知识点是单点登录(Single Sign-On, SSO)系统,特别是关于CAS(Central Authentication Service)的实践应用。CAS是一种开放源码的SSO协议,它允许用户通过一个认证...
1. 部署Apache和mod_jk模块需要root权限,而单点登录系统如CAS(Central Authentication Service)已集成在TNMS系统中,无需额外部署。 2. 配置文件数量较多,包括Apache的httpd.conf和httpd-vhosts.conf,以及负载...
CAS整合LDAP实现单点登录的原理及部署学习笔记,cas实现单点登录,ldap负责账户管理
本文将详细介绍如何使用CAS整合CXF,实现基于Tomcat服务器的单点登录部署步骤。 首先,我们需要在Tomcat服务器上部署CAS项目。这通常涉及以下步骤: 1. **下载CAS服务器**:从官方Git仓库或Maven仓库获取最新的CAS...
CAS(Central Authentication Service)是一种基于Web的单点登录(Single Sign-On, SSO)协议,广泛应用于企业、教育和组织的认证系统。本部署说明主要涵盖CAS服务端的安装、配置以及客户端的证书处理。 首先,我们...
CAS 是 Central Authentication Service 的缩写 —— 中央认证服务,一种独立开放指令协议,是 Yale 大学发起的一个企业级开源项目,旨在为 Web 应用系统提供一种可靠的 SSO 解决方案。 CAS 支持以下特性: CAS v1, ...
### django+cas环境部署知识点详解 #### 一、系统架构概述 本系统采用了Django作为主要的应用框架,并结合了Nginx、Elasticsearch、CAS(Central Authentication Service)及MySQL等多个组件来构建一个完整的分布式...
【构建CAS的WAR部署包(CAS-Overlay)(cas-server-webapp)(4.2.7)】是一个关于在Java环境中部署中央认证服务(Central Authentication Service,简称CAS)的重要过程。CAS是一个开源的身份验证框架,广泛用于实现单...
5. 用户选择登出时,访问 CAS Server 的登出路径,清除所有应用的会话状态,强制用户下次访问时重新登录。 通过以上步骤,你可以建立一个简单的 CAS 示例环境,体验和测试单点登录功能。实际生产环境中,可能还需要...
《Yale CAS Server的部署及cas-java-client 3.2的应用》 CAS(Central Authentication Service,中央认证服务)是耶鲁大学开发的一个开源的身份验证框架,它为Web应用程序提供了单一登录(Single Sign-On,SSO)...
CAS(Central Authentication Service)是Java开发的一款开源单点登录(Single Sign-On,简称SSO)系统,广泛应用于多应用系统的统一身份验证。CAS服务器的部署是实现跨域、跨平台的身份验证服务的关键步骤,对于...
### CAS的部署规则详解 #### 一、背景介绍 CAS(Central Authentication Service)是一种开放源代码的单点登录协议和服务实现。它旨在简化Web应用程序的身份验证流程,支持多个应用程序共享同一套用户凭证进行身份...
本压缩包"cas-server-4.0.0-release"包含的是CAS Server 4.0.0版本的源码和部署文件,用于搭建和配置CAS服务器。 CAS Server 4.0.0是CAS的一个重要版本,它引入了许多改进和新特性。以下将详细阐述该版本的关键知识...
### 关于CAS单点登录的了解 #### 一、CAS简介 CAS(Central Authentication Service)是一种开放源代码的单点登录协议和服务实现,主要用于解决Web应用间的认证问题。CAS为Web应用提供了一种集中式的认证服务,使得...