上次cas5.3.14入门二,cas介绍及登陆流程讲到CAS Server 生成一个TGT对象,放入自己的缓存,本片介绍一下如何将TGT存储到redis,为什么要把它存储到redis 呢,为了高可用以及扩展集群部署,集群部署的时候显然存储在内存中是不合适的
先看官网:https://apereo.github.io/cas/5.3.x/
官方提供了这么多存储TGT的方式,咱们只说redis 的方式,其他方式都可以参照配置。
参照官网
首先配置maven,其实还需要另外一个依赖
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-redis-ticket-registry</artifactId>
<version>${cas.version}</version>
</dependency>
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-redis-service-registry</artifactId>
<version>${cas.version}</version>
</dependency>
cas在 application.properties的所有配置都是通过CasConfigurationProperties这个类来读取的,我们看看这个类,打开我们按照上节说到的overlay项目,我使用的IDEA 工具配置了eclipse的快捷键,ctrl+shift+t 查找类,CasConfigurationProperties中看到这个
在代码中我们看到这一行,再点进去,这个类里面提供了各种ticket 的配置说明
public class TicketProperties implements Serializable {
private static final long serialVersionUID = 5586947805593202037L;
/**
* Properties and settings related to session-transient tickets.
*/
@NestedConfigurationProperty
private TransientSessionTicketProperties tst = new TransientSessionTicketProperties();
/**
* Properties and settings related to proxy-granting tickets.
*/
@NestedConfigurationProperty
private ProxyGrantingTicketProperties pgt = new ProxyGrantingTicketProperties();
/**
* Properties and settings related to ticket encryption.
*/
@NestedConfigurationProperty
private EncryptionJwtSigningJwtCryptographyProperties crypto = new EncryptionJwtSigningJwtCryptographyProperties();
/**
* Properties and settings related to proxy tickets.
*/
@NestedConfigurationProperty
private ProxyTicketProperties pt = new ProxyTicketProperties();
/**
* Properties and settings related to ticket registry.
*/
@NestedConfigurationProperty
private TicketRegistryProperties registry = new TicketRegistryProperties();
/**
* Properties and settings related to service tickets.
*/
@NestedConfigurationProperty
private ServiceTicketProperties st = new ServiceTicketProperties();
/**
* Properties and settings related to ticket-granting tickets.
*/
@NestedConfigurationProperty
private TicketGrantingTicketProperties tgt = new TicketGrantingTicketProperties();
public TicketProperties() {
this.crypto.setEnabled(false);
}
}
我们只看registry这个属性配置,其他的都是用的到的配置,有需要的自己去源码里面看看就好了,我们进到TicketRegistryProperties这个类里面看到它的属性就是对应官网所提供的存储方式,我们再找到redis 属性,进入到RedisTicketRegistryProperties这个类里面,它继承了一个BaseRedisProperties,看看它爹,里面都是提供了关于redis 的配置
再进到官网https://apereo.github.io/cas/5.3.x/installation/Configuration-Properties-Common.html#redis-configuration,有关redis 的属性配置
# ${configurationKey}.redis.host=localhost
# ${configurationKey}.redis.database=0
# ${configurationKey}.redis.port=6380
# ${configurationKey}.redis.password=
# ${configurationKey}.redis.timeout=2000
# ${configurationKey}.redis.useSsl=false
# ${configurationKey}.redis.usePool=true
# ${configurationKey}.redis.pool.max-active=20
# ${configurationKey}.redis.pool.maxIdle=8
# ${configurationKey}.redis.pool.minIdle=0
# ${configurationKey}.redis.pool.maxActive=8
# ${configurationKey}.redis.pool.maxWait=-1
# ${configurationKey}.redis.pool.numTestsPerEvictionRun=0
# ${configurationKey}.redis.pool.softMinEvictableIdleTimeMillis=0
# ${configurationKey}.redis.pool.minEvictableIdleTimeMillis=0
# ${configurationKey}.redis.pool.lifo=true
# ${configurationKey}.redis.pool.fairness=false
# ${configurationKey}.redis.pool.testOnCreate=false
# ${configurationKey}.redis.pool.testOnBorrow=false
# ${configurationKey}.redis.pool.testOnReturn=false
# ${configurationKey}.redis.pool.testWhileIdle=false
# ${configurationKey}.redis.sentinel.master=mymaster
# ${configurationKey}.redis.sentinel.node[0]=localhost:26377
# ${configurationKey}.redis.sentinel.node[1]=localhost:26378
# ${configurationKey}.redis.sentinel.node[2]=localhost:26379
接下来配置试试,简单配置一下,其他的根据需求配置
cas.ticket.registry.redis.host=localhost
cas.ticket.registry.redis.database=0
cas.ticket.registry.redis.port=6380
cas.ticket.registry.redis.password=123456
cas.ticket.registry.redis.timeout=20000
cas.ticket.registry.redis.useSsl=false
cas.ticket.registry.redis.usePool=false
打开http://localhost:8080/cas进行登陆,登陆完成查看redis 会发现存在
完毕