单点登出产生的原因
前几篇我们已经讲了如何搭建单点登录以及他的服务注册等,我们也清楚单点登录的目的是为了不用频繁的去登录,基本上有单点登录的地方就有单点登出,因为这两个感觉是绑定在一起的。我们知道cas单点登录成功后,cas会为我们每个客户端生成一个session,然后再次访问这个客户端的接口的时候,我们客户端引入的cas的jar包会去判断,这个接口是否有session,如果没有的话就继续判断下面的,如果有的话就直接跳过。但是我们想象一下,当我们点击caslogout的时候,发现其他子系统还能登陆,但是却不能再次免登录到其他的系统。这可能就有点怪怪的,单点登录不是一个登录,接入进来的子系统就免登录了吗?事实是这样的,但是cas的原理其实是靠tgt来记录登录的信息,也就是当我们登录的时候,我们浏览器会记录一个tgt,下次子系统登录的时候,会带着浏览器的tgt如果存在的话,那么就授予票据,之后的一系列操作就不说了。这样就达到免登录的效果了。但是有这样的一个场景:我们接入cas的子系统有3个,这时候我们通过cas单点登录开启了两个子系统,这时候我执行一下caslogout,我们发现已经登录上去的两个子系统没有受影响,但是当我们点击最后一个子系统的时候发现他需要登录。刚开始我还以为我自己弄错了,但是试了好久还是这个问题。我们上面说了tgt的事情(可以自己去了解一下cas单点登录的原理),我们执行caslougout的时候其实就是将cas的登录tgt给只为无效,所以当我们第三个子系统去登录的时候,cas发现他没有session,同时也没有st,这个时候就会转到cas登录页面,但是如果cas已经登录的话那么就能直接获取到st,可是因为我们之前的退出已经将cas的tgt给只为无效了,所以cas发现没有登录,就要去重新登录。但是这样客户一定不会满意,因为他们要的效果是,一个退出其他的都要退出,一个登录其他的都要登录,这时候就需要单点退出了,也就是我接下来要讲的内容。前几篇我们已经讲了如何搭建单点登录以及他的服务注册等,我们也