Open ningyu1 opened 5 years ago
感谢
博主博文写的不错,我也写博客这是我的地址,http://www.kailing.pub 欢迎回访,多多交流。ps:我们用的相同的评论系统Gitalk ,你的好像有点问题
@klboke 博主博文写的不错,我也写博客这是我的地址,http://www.kailing.pub 欢迎回访,多多交流。ps:我们用的相同的评论系统Gitalk ,你的好像有点问题
不想创建过多issue,所以公用了一个^_^
在客户端需要集群部署的时候你的 “Client Server集群模式下session问题”,实现代码我用了,看了您使使用json序列化的,在反序列化时候,取出来实际上只有一个ID呢? redisClient.get(mappingId, NAME_SPACE, HttpSession.class, null); 就使这个位置,看源码,实际上HttpSession是一个接口。在后续操作中没法执行org.jasig.cas.client.session.SingleSignOutHandler 调用 的session.invalidate();方法。
我现在的解决方式是将session id放入和mappingid的对应关系中,lougou的时候通过mappingid获取到session id,删除redis中的对应session数据来解决的,这里会对tomcat中的session管理器强耦合,因为不同的session管理器的sessionid前缀不一样。
实现代码
public HttpSession removeSessionByMappingId(String mappingId) {
Jedis jedis = jedisPool.getResource();
try {
String sessionId = jedis.get(casRedisNameSpace + mappingId);
if (sessionId != null) {
LOG.debug("Found session for mappingId. Session Removed.");
} else {
LOG.debug("No session for mappingId found. Ignoring.");
}
if (sessionId != null) {
LOG.debug("找到session [{}] ,删除", sessionId);
//此处需要对session的管理组件强耦合,session key必须一致
//
String redissonId = "redisson:tomcat_session:"+sessionId;
LOG.debug("找到session [{}] ,删除redis中的session", redissonId);
jedis.del(redissonId);
removeBySessionById(sessionId);
}
return null;
} finally {
jedisPool.returnResource(jedis);
}
}
@taohuangtao 嗯嗯,其实只放id是可以的
https://ningyu1.github.io/blog/index.html