当前位置:   article > 正文

票据ticket实现方式java代码_CAS工程用redis集群存储票据ticket Spring整合

spring 整合cas 多次更新ticket

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:p="http://www.springframework.org/schema/p"

xmlns:c="http://www.springframework.org/schema/c"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:util="http://www.springframework.org/schema/util"

xmlns:sec="http://www.springframework.org/schema/security"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd

http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

p:backingMap-ref="attrRepoBackingMap" />

class="com.mchange.v2.c3p0.ComboPooledDataSource"

p:driverClass="com.mysql.jdbc.Driver"

p:jdbcUrl="jdbc:mysql://192.168.103.169:3306/userdb?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull"

p:user="root"

p:password="123"

p:initialPoolSize="6"

p:minPoolSize="6"

p:maxPoolSize="18"

p:maxIdleTimeExcessConnections="120"

p:checkoutTimeout="10000"

p:acquireIncrement="6"

p:acquireRetryAttempts="5"

p:acquireRetryDelay="2000"

p:idleConnectionTestPeriod="30"

p:preferredTestQuery="select 1"/>

memberOf

faculty

staff

org

p:client-ref="redisTemplate"

p:tgtTimeout="28800"

p:stTimeout="10"/>

class="org.jasig.inspektr.audit.support.Slf4jLoggingAuditTrailManager"

p:entrySeparator="${cas.audit.singleline.separator:|}"

p:useSingleLine="${cas.audit.singleline:false}"/>

3:redis.cluster.properties配置文件

#redis\u4E2D\u5FC3

#redis\u7684\u670D\u52A1\u5668\u5730\u5740

redis.host=192.168.103.158

#redis\u7684\u670D\u52A1\u7AEF\u53E3

redis.port=6379

#\u5BC6\u7801

redis.password=

#\u6700\u5927\u7A7A\u95F2\u6570

redis.maxIdle=100

#\u6700\u5927\u8FDE\u63A5\u6570

redis.maxActive=300

#\u6700\u5927\u5EFA\u7ACB\u8FDE\u63A5\u7B49\u5F85\u65F6\u95F4

redis.maxWait=1000

#\u5BA2\u6237\u7AEF\u8D85\u65F6\u65F6\u95F4\u5355\u4F4D\u662F\u6BEB\u79D2

redis.timeout=100000

redis.maxTotal=1000

redis.minIdle=8

#\u660E\u662F\u5426\u5728\u4ECE\u6C60\u4E2D\u53D6\u51FA\u8FDE\u63A5\u524D\u8FDB\u884C\u68C0\u9A8C,\u5982\u679C\u68C0\u9A8C\u5931\u8D25,\u5219\u4ECE\u6C60\u4E2D\u53BB\u9664\u8FDE\u63A5\u5E76\u5C1D\u8BD5\u53D6\u51FA\u53E6\u4E00\u4E2A

redis.testOnBorrow=true

#sentinel

#spring.redis.sentinel.node1.host=127.0.0.1

#spring.redis.sentinel.node2.host=127.0.0.1

#spring.redis.sentinel.node3.host=127.0.0.1

#spring.redis.sentinel.node1.port=26379

#spring.redis.sentinel.node2.port=26479

#spring.redis.sentinel.node3.port=26579

#sentinel

#jediscluster

#cluster1.host.port=127.0.0.1:7000

#cluster2.host.port=127.0.0.1:7001

#cluster3.host.port=127.0.0.1:7002

#cluster4.host.port=127.0.0.1:7003

#cluster5.host.port=127.0.0.1:7004

#cluster6.host.port=127.0.0.1:7005

#cluster7.host.port=127.0.0.1:7006

#cluster8.host.port=127.0.0.1:7007

#jediscluster

#rediscluster

#spring.redis.cluster.nodes=192.168.103.158:6379

spring.redis.cluster.nodes=192.168.103.174:6379,192.168.103.174:6389,192.168.103.174:6399,192.168.103.173:6379,192.168.103.173:6389,192.168.103.173:6399

spring.redis.cluster.max-redirects=3

4. CAS用redis集群存储ticket的自定义实现类:RedisClusterTicketRegistry.java

package com.hivescm.cas.ticket.registry;

import org.jasig.cas.ticket.ServiceTicket;

import org.jasig.cas.ticket.Ticket;

import org.jasig.cas.ticket.TicketGrantingTicket;

import org.jasig.cas.ticket.registry.encrypt.AbstractCrypticTicketRegistry;

import org.springframework.beans.factory.DisposableBean;

import org.springframework.data.redis.core.RedisTemplate;

import javax.validation.constraints.Min;

import javax.validation.constraints.NotNull;

import java.util.Collection;

import java.util.HashSet;

import java.util.Set;

import java.util.concurrent.TimeUnit;

/**

* Key-value ticket registry implementation that stores tickets in redis keyed on the ticket ID.

*

* @author serv

*/

public final class RedisClusterTicketRegistry extends AbstractCrypticTicketRegistry implements DisposableBean {

private final static String TICKET_PREFIX = "CAS:TICKET:";

/**

* redis client.

*/

@NotNull

private RedisTemplate client;

/**

* TGT cache entry timeout in seconds.

*/

@Min(0)

private int tgtTimeout;

/**

* ST cache entry timeout in seconds.

*/

@Min(0)

private int stTimeout;

public void setClient(RedisTemplate client) {

this.client = client;

}

public void setTgtTimeout(int tgtTimeout) {

this.tgtTimeout = tgtTimeout;

}

public void setStTimeout(int stTimeout) {

this.stTimeout = stTimeout;

}

public RedisClusterTicketRegistry() {

}

/**

* Creates a new instance using the given redis client instance, which is presumably configured via

* net.spy.redis.spring.redisClientFactoryBean.

*

* @param client redis client.

* @param ticketGrantingTicketTimeOut TGT timeout in seconds.

* @param serviceTicketTimeOut ST timeout in seconds.

*/

public RedisClusterTicketRegistry(final RedisTemplate client, final int ticketGrantingTicketTimeOut,

final int serviceTicketTimeOut) {

this.tgtTimeout = ticketGrantingTicketTimeOut;

this.stTimeout = serviceTicketTimeOut;

this.client = client;

}

protected void updateTicket(final Ticket ticket) {

logger.debug("Updating ticket {}", ticket);

try {

String redisKey = this.getTicketRedisKey(ticket.getId());

this.client.boundValueOps(redisKey).set(ticket, getTimeout(ticket), TimeUnit.SECONDS);

} catch (final Exception e) {

logger.error("Failed updating {}", ticket, e);

}

}

public void addTicket(final Ticket ticket) {

logger.debug("Adding ticket {}", ticket);

try {

String redisKey = this.getTicketRedisKey(ticket.getId());

this.client.boundValueOps(redisKey).set(ticket, getTimeout(ticket), TimeUnit.SECONDS);

} catch (final Exception e) {

logger.error("Failed Adding {}", ticket, e);

}

}

public boolean deleteTicket(final String ticketId) {

logger.debug("Deleting ticket {}", ticketId);

try {

this.client.delete(this.getTicketRedisKey(ticketId));

return true;

} catch (final Exception e) {

logger.error("Failed deleting {}", ticketId, e);

}

return false;

}

public Ticket getTicket(final String ticketId) {

try {

final Ticket t = (Ticket) this.client.boundValueOps(this.getTicketRedisKey(ticketId)).get();

if (t != null) {

return getProxiedTicketInstance(t);

}

} catch (final Exception e) {

logger.error("Failed fetching {} ", ticketId, e);

}

return null;

}

/**

* {@inheritDoc}

* This operation is not supported.

*

* @throws UnsupportedOperationException if you try and call this operation.

*/

public Collection getTickets() {

Set tickets = new HashSet();

Set keys = this.client.keys(this.getPatternTicketRedisKey());

for (String key : keys) {

Ticket ticket = (Ticket) this.client.boundValueOps(key).get();

if (ticket == null) {

this.client.delete(key);

} else {

tickets.add(ticket);

}

}

return tickets;

}

public void destroy() throws Exception {

client.getConnectionFactory().getConnection().close();

}

@Override

protected boolean needsCallback() {

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");

}

//Add a prefix as the key of redis

private String getTicketRedisKey(String ticketId) {

return TICKET_PREFIX + ticketId;

}

// pattern all ticket redisKey

private String getPatternTicketRedisKey() {

return TICKET_PREFIX + "*";

}

}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/538576
推荐阅读
相关标签
  

闽ICP备14008679号