基于redis的cas集群配置
1、cas ticket统一存储
做cas集群首先需要将ticket拿出来,做统一存储,以便每个节点访问到的数据一致。官方提供基于memcached的方案,由于项目需要,需要做计入redis,根据官方例子改了一个基于redis版本的。
- public class RedisTicketRegistry extends AbstractDistributedTicketRegistry{
- @NotNull
- private final RedisTemplate<String,Object> reidsTemplate;
- /**
- * TGT cache entry timeout in seconds.
- */
- @Min(0)
- private final int tgtTimeout;
- /**
- * ST cache entry timeout in seconds.
- */
- @Min(0)
- private final int stTimeout;
- public RedisTicketRegistry(RedisTemplate<String,Object> reidsTemplate,int tgtTimeout,int stTimeout){
- this.reidsTemplate=reidsTemplate;
- this.tgtTimeout=tgtTimeout;
- this.stTimeout=stTimeout;
- }
- @Override
- public void addTicket(Ticket ticket) {
- logger.debug("Adding ticket {}", ticket);
- try {
- reidsTemplate.opsForValue().set(ticket.getId(),ticket, getTimeout(ticket), TimeUnit.SECONDS);
- } catch (final Exception e) {
- logger.error("Failed adding {}", ticket, e);
- }
- }
- @Override
- public Ticket getTicket(String ticketId) {
- try {
- final Ticket t = (Ticket) this.reidsTemplate.opsForValue().get(ticketId);
- if (t != null) {
- return getProxiedTicketInstance(t);
- }
- } catch (final Exception e) {
- logger.error("Failed fetching {} ", ticketId, e);
- }
- return null;
- }
- @Override
- public boolean deleteTicket(String ticketId) {
- logger.debug("Deleting ticket {}", ticketId);
- try {
- this.reidsTemplate.delete(ticketId);
- return true;
- } catch (final Exception e) {
- logger.error("Failed deleting {}", ticketId, e);
- }
- return false;
- }
- @Override
- public Collection<Ticket> getTickets() {
- throw new UnsupportedOperationException("GetTickets not supported.");
- }
- @Override
- protected void updateTicket(Ticket ticket) {
- logger.debug("Updating ticket {}", ticket);
- try {
- this.reidsTemplate.delete(ticket.getId());
- reidsTemplate.opsForValue().set(ticket.getId(),ticket, getTimeout(ticket), TimeUnit.SECONDS);
- } catch (final Exception e) {
- logger.error("Failed updating {}", ticket, e);
- }
- }
- @Override
- protected boolean needsCallback() {
- // TODO Auto-generated method stub
- return true;
- }
- private int getTimeout(final Ticket t) {
- if (t instanceof TicketGrantingTicket) {
- return this.tgtTimeout;
- } else if (t instanceof ServiceTicket) {
- return this.stTimeout;
- }
- throw new IllegalArgumentException("Invalid ticket type");
- }
- }
对应的ticketRegistry.xml的配置如下:
- <bean id="ticketRegistry" class="com.test.cas.ticket.registry.RedisTicketRegistry">
- <constructor-arg index="0" ref="redisTemplate" />
- <constructor-arg index="1" value="1800" />
- <constructor-arg index="2" value="10" />
- </bean>
- <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
- <property name="maxIdle" value="200" />
- <property name="testOnBorrow" value="true" />
- </bean>
- <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
- p:host-name="redis_server_ip" p:port="6379" p:pool-config-ref="poolConfig"/>
- <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
- p:connection-factory-ref="connectionFactory">
- </bean>
这里既然使用了redis作为ticket存储,就需要将原来的方案给注释掉:
- <!-- Ticket Registry
- <bean id="ticketRegistry" class="org.jasig.cas.ticket.registry.DefaultTicketRegistry" />
- -->
- <!--Quartz -->
- <!-- TICKET REGISTRY CLEANER
- <bean id="ticketRegistryCleaner" class="org.jasig.cas.ticket.registry.support.DefaultTicketRegistryCleaner"
- p:ticketRegistry-ref="ticketRegistry"
- p:logoutManager-ref="logoutManager" />
- <bean id="jobDetailTicketRegistryCleaner" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
- p:targetObject-ref="ticketRegistryCleaner"
- p:targetMethod="clean" />
- <bean id="triggerJobDetailTicketRegistryCleaner" class="org.springframework.scheduling.quartz.SimpleTriggerBean"
- p:jobDetail-ref="jobDetailTicketRegistryCleaner"
- p:startDelay="20000"
- p:repeatInterval="5000000" />
- -->
到这里,cas的改进就OK了,下面就需要将session也做集群同步。
2、tomcat session集群同步
这里采用开源的tomcat-redis-session-manager,git hub地址为:https://github.com/jcoleman/tomcat-redis-session-manager
这里只使用的是jdk1.7,tomcat7,tomcat6需要重新编译好像。
1)拷贝编译打包之后的tomcat-redis-session-manager-VERSION.jar,jedis-2.5.2.jar,commons-pool2-2.2.jar到tomcat/lib目录下
2)修改Tomcat context.xml (or the context block of the server.xml if applicable.)
- <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve"/>
- <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
- host="redis_server_name"
- port="6379"
- database="0"
- maxInactiveInterval="1800"/>
至此cas集群配置就可以了。
基于redis的cas集群配置的更多相关文章
- 基于redis的cas集群配置(转)
1.cas ticket统一存储 做cas集群首先需要将ticket拿出来,做统一存储,以便每个节点访问到的数据一致.官方提供基于memcached的方案,由于项目需要,需要做计入redis,根据官方 ...
- 基于Redis的CAS集群
单点登录(SSO)是复杂应用系统的基本需求,Yale CAS是目前常用的开源解决方案.CAS认证中心,基于其特殊作用,自然会成为整个应用系统的核心,所有应用系统的认证工作,都将请求到CAS来完成.因此 ...
- java:redis(redis安装配置,redis的伪集群配置)
1.redis安装配置: .安装gcc : yum install gcc-c++ .使用FTP工具FileZilla上传redis安装包到linux根目录下(当前步骤可以替换为:在root目录下执行 ...
- redis:哨兵集群配置
最少配置1主2从3哨兵 一.引言 上一篇文章我们详细的讲解了Redis的主从集群模式,其实这个集群模式配置很简单,只需要在Slave的节点上进行配置,Master主节点的配置不需要做任何更改,但是有一 ...
- Redis单机和集群配置(版本在5.0后)
摘抄并用于自己后查 单机版的配置: 1. 下载redis压缩包,然后解压缩文件(tar xzf): 2. 进入解压后的redis文件目录,编译redis源文件(make,没有c环境要gcc): 3. ...
- HyperLedger Fabric基于zookeeper和kafka集群配置解析
简述 在搭建HyperLedger Fabric环境的过程中,我们会用到一个configtx.yaml文件(可参考Hyperledger Fabric 1.0 从零开始(八)--Fabric多节点集群 ...
- CentOS7 配置 Redis Sentinel主从集群配置
Redis Sentinel主从集群 环境.准备 slave配置 sentinel配置 测试 C#连接Redis Sentinel 1.环境.准备 单实例3台CentOS7服务器,IP地址.: 192 ...
- redis学习五 集群配置
redis集群配置 0,整体概述 整体来说就是: 1,安装redis 2,配置多个redis实例 3,安装 ruby和rubygems 4,启动red ...
- redis 负载均衡 集群配置
redis 官网 http://redis.io/ 中文网站 http://redis.cn/ 谷歌代码的redis项目 https://code.google.com/p/redis/ http:/ ...
随机推荐
- Python编码、集合set、深浅拷贝
编码 : a.encode(' ') windows 默认编码GBK ASCII : 最早的编码. ⾥⾯有英⽂⼤写字⺟, ⼩写字⺟, 数字, ⼀些特殊字符.没有中⽂, 8个01代码, 8个bi ...
- java 服务端I/O非阻塞实现05
/** * 非阻塞IO多线线程服务端 * 当一个任务进入多线程,这个任务线程需要处理接收信息.发送信息.因而发生I/O阻塞问题 * 利用selector可以实现异步 * */ public class ...
- Top Page
Top Page 由于个人的博客中涉及了几个不同的领域.今后准备设置Index页进行一番整理 : 所有其他页面都可以从这个页面遍历 Top Page
- easyui-tab标签
一. 加载方式 //class 加载方式<div id="box" class="easyui-tabs" style="width:500px ...
- Java this与super的仇与恨
刚开始学习面向对象的时候,看到this和super觉得this就是指当前对象,super指最近的父级对象.觉得用处不大. 后来,随着学习的深入,看别人的代码越来越多,发现this和super的使用率贼 ...
- uni-app 引入ecart
https://blog.csdn.net/CherryLee_1210/article/details/83016706(copy) 1.首先在uni-app中不支持包下载所以得自己先新建一个项目, ...
- C# Note35: 异步操作
.NET Framework 为异步操作提供了两种设计模式:使用 IAsyncResult 对象的异步操作与使用事件的异步操作. IAsyncResult 异步设计模式 通过名为 BeginOpera ...
- Python——高阶函数——map filter zip
一.map函数 1.作用:它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回. 2.实例 def f(x): return x* ...
- 如何从官网下载 Google Chrome 离线安装包
1.打开 Chrome 浏览器主页:http://www.google.cn/chrome 2.地址栏最后的网址是这样的:http://www.google.cn/chrome/browser/des ...
- CSS3选择器p:nth-child和p:nth-of-type之间的差异
稍微自己理解了一下,感觉就是:nth-of-type似乎有种族歧视,界限划分很清晰.在同一个国家(父级)中的时候,nth-of-type指认自己人排名,nth-child全都算在内排名,阿T的要求真的 ...