上次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 會發現存在
完畢