Cas集群中对于tgt使用redis共享的操作
来源:互联网 发布:nginx内置变量详解 编辑:程序博客网 时间:2024/06/05 10:22
继承cas官方的类AbstractDistributedTicketRegistry
package org.jasig.cas.ticket.registry;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Collection;
import org.jasig.cas.ticket.Ticket;
import org.jasig.cas.ticket.TicketGrantingTicket;
import org.jasig.cas.util.PropertiesUtil;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class RedisTicketRegistry extends AbstractDistributedTicketRegistry{
private static int redisDatabaseNum;
private static String hosts;
private static int port;
private static int st_time; //ST最大空闲时间
private static int tgt_time; //TGT最大空闲时间
private static String password;
private static int timeout;
private static JedisPool cachePool;
static {
redisDatabaseNum =Integer.valueOf(PropertiesUtil.getProp("redis-tgt.properties", "redis_database_num")); //指定redis索引值
hosts =PropertiesUtil.getProp("redis-tgt.properties", "hosts"); //主机的值
port = Integer.valueOf(PropertiesUtil.getProp("redis-tgt.properties", "port")) ; //端口
st_time = Integer.valueOf(PropertiesUtil.getProp("redis-tgt.properties", "st_time")); //ST最大空闲时间
tgt_time =Integer.valueOf(PropertiesUtil.getProp("redis-tgt.properties", "tgt_time")); //TGT最大空闲时间
password =PropertiesUtil.getProp("redis-tgt.properties", "password"); //密码
timeout=Integer.valueOf(PropertiesUtil.getProp("redis-tgt.properties", "timeout")); //超时时间
//cachePool = new JedisPool(new JedisPoolConfig(), hosts, port);
cachePool=new JedisPool(new JedisPoolConfig(), hosts, port, timeout, password);
}
public void addTicket(Ticket ticket) {
Jedis jedis = cachePool.getResource();
jedis.select(redisDatabaseNum);
int seconds = 0;
String key = ticket.getId() ;
if(ticket instanceof TicketGrantingTicket){
//key = ((TicketGrantingTicket)ticket).getAuthentication().getPrincipal().getId();
seconds = tgt_time/1000;
}else{
seconds = st_time/1000;
}
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = null;
try{
oos = new ObjectOutputStream(bos);
oos.writeObject(ticket);
}catch(Exception e){
log.error("adding ticket to redis error.");
}finally{
try{
if(null!=oos) oos.close();
}catch(Exception e){
log.error("oos closing error when adding ticket to redis.");
}
}
jedis.set(key.getBytes(), bos.toByteArray());
jedis.expire(key.getBytes(), seconds);
cachePool.returnResource(jedis);
}
public Ticket getTicket(final String ticketId) {
return getProxiedTicketInstance(getRawTicket(ticketId));
}
private Ticket getRawTicket(final String ticketId) {
if(null == ticketId) return null;
Jedis jedis = cachePool.getResource();
jedis.select(redisDatabaseNum);
Ticket ticket = null;
byte[] bs = jedis.get(ticketId.getBytes());
if(bs!= null){
ByteArrayInputStream bais = new ByteArrayInputStream(jedis.get(ticketId.getBytes()));
ObjectInputStream ois = null;
try{
ois = new ObjectInputStream(bais);
ticket = (Ticket)ois.readObject();
}catch(Exception e){
log.error("getting ticket to redis error.");
}finally{
try{
if(null!=ois) ois.close();
}catch(Exception e){
log.error("ois closing error when getting ticket to redis.");
}
}
}
cachePool.returnResource(jedis);
return ticket;
}
public boolean deleteTicket(final String ticketId) {
if (ticketId == null) {
return false;
}
Jedis jedis = cachePool.getResource();
jedis.select(redisDatabaseNum);
jedis.del(ticketId.getBytes());
cachePool.returnResource(jedis);
return true;
}
public Collection<Ticket> getTickets() {
throw new UnsupportedOperationException("GetTickets not supported.");
}
protected boolean needsCallback() {
return false;
}
protected void updateTicket(final Ticket ticket) {
addTicket(ticket);
}
}
修改ticketRegistry.xml
注销掉红框中的东西引入改造后的票据管理
因为使用了reids的时间管理机制
这里我们将原有的配置给取消掉
下一步就是服务器间的session共享问题
- Cas集群中对于tgt使用redis共享的操作
- CAS 4.0 Cluster / Tomcat redis Session manager / Token(TGT)存入Redis集群 / Nginx 负载
- 基于Redis的CAS集群
- 基于Redis的CAS集群
- 【PHP】PHP中对于Redis的操作。
- 在ofbiz集群中使用redis共享session
- 使用redis进行基于shiro的session集群共享
- 使用redis进行基于shiro的session集群共享
- 使用redis进行基于shiro的session集群共享
- Redis集群的操作
- Redis集群的操作
- CAS在IBM Websphere7集群中实现票据共享
- 使用jedisCluster操作Redis集群
- Redis集群的使用
- Cinder中的iscsitarget和tgt的使用
- nginx+tomcat+redis的集群+session共享
- 基于Redis的Tomcat集群Session共享
- tomcat集群-基于redis的session共享
- Tyvj 1174 互素 (欧拉函数)
- 安卓简单技术-Notificationz自定义通知栏
- Android 6.0 运行时权限处理完全解析
- 分布式服务框架 Zookeeper -- 管理分布式环境中的数据
- STM32---TIM
- Cas集群中对于tgt使用redis共享的操作
- PHP cookie存放数组
- php钩子和简单的分发方式
- Codeforces #362 div2 prob697 没有题解= =
- MFC不同dll中对话框的调用问题
- 5前期异常捕获
- Spring Batch 整理
- 解决IIS7.5 IIS8下的discuzX3.2伪静态问题
- STL-vector