思路: 上一篇文章中,把TGT存入了redis集群中,跟踪代码后发现,在ticket对象中还存放着所有访问的server信息,因为当登出时,会往每个曾经访问过CAS客端发送登出信息。因为修改了存储方式,导致该对像无数据。所以我们要把server信息也存入redis中, 退出时取出。
CentralAuthenticationServiceImpl.java中介入,grantServiceTicket() 该方法是生成TOKEN及存储的。
final ServiceTicket serviceTicket = ticketGrantingTicket.grantServiceTicket(generatedServiceTicketId, service,
this.serviceTicketExpirationPolicy, credentials != null);//存service , 单点拿出时拿出来用。lumz
//add by lumz for store service to redis
if (ticketGrantingTicket != null){
HashMap<String, Service> sm = new HashMap<String, Service>();//缓存MAP
HashMap<String, Service> sm1 = new HashMap<String, Service>();//临时MAP
String key = ticketGrantingTicket.getId()+ticketGrantingTicket.getAuthentication()