刚接触cas没多久,想把学习cas的过程记录下来,这样之后再用能够尽快回忆和上手。web
也许理解的有问题,还请懂的大神指教一下,先谢过各位大侠了。浏览器
一,cas的基本原理缓存
1. 用户访问 打有cas client jar包的web1 service,此时由于web1 sercvice 的过滤器发现请求没ST参数(ST参数 意思就是service ticket 是一种服务用的票据,我的理解是为了在cas 服务端验证此service能够被直接登陆所产生的的票据),同时在session中也没有发现有任何用户的信息(这里我的感受是由于没有保存TGT的缘故,再加上用户访问的时候没有带着TGC因此查不到我的信息),web1 service 就重定向到了 cas server。cookie
2. cas server 也没有检测到有ST参数,因此就跳转到cas server提供的登陆界面了。session
3. 当用户输入验证信息经过之后,cas server 会生成一个TGT (用于用户成功登陆的票据,他的key就是TGC就是保存在客户端的cookie)和 一个随机的ST参数,并放入缓存中,此时cas server 会重定向到 web1 service,同时把ST参数加在web1 service url的后面,而后把TGC 这个cookie 写在浏览器端。eclipse
4. 请求到了web1 service 后,web1 service 发现有ST参数, 因而带着ST参数像 cas server 发起了验证请求。 cas server 接到验证请求之后,拿着ST参数和他刚随机产生的ST作对比,若是一致则向web1 service返回成功,并销毁ST参数。学习
5. 此时web1 service拿到返回成功的表示后,保存TGT 用户的身份票据,而后返回web1 登陆事后的界面。下一次在访问web1的时候 浏览器会带着TGC来请求,此时在web1 service的session中会查询到此用户信息(也就是用TGC去去查TGT),直接登陆成功返回页面。url
6. 假如用户去访问web2 service, 这个应用服务也添加cas client jar包并改了配置。此时,用户访问web2 service时 是带着TGC 这个cookie的, 可是web2 service发现请求没带ST参数,而且发现session有用户信息,因此直接重定向到cas server 中。server
7. cas server 发现没有ST 参数 可是 有TGC,因而cas server 就用此TGC 在本身缓存的TGT中查询了一下 发现了用户的身份因而 就生成了一个随机的ST而且重定向到了web2 service,也就是把ST参数 加到了web2 service 的最后。ip
8. web2 service 接收到请求之后,拦截器发现了有ST参数了,就拿着ST参数去cas server 端请求验证去了。验证经过,随机的ST参数被销毁,而后返回成功标识给web2 service,web2 service 保存TGT用户信息,并返web2的页面给用户。
我的理解 TGC 就像一把钥匙, TGT 就是一个门,门里面就是保存的用户信息,钥匙孔就是key值,而后浏览器保存这把钥匙(也就是TGC cookie) 想开哪一个开哪一个,ST就像是一张证实,证实了本身是cas client的身份,向cas server证实此应用已经进行过配置并有过滤器有cas 的jar包,能够加入cas 单点登陆系统进行统一认证。
图先不画了 用工夫补上,原理就是这样,下面准备说一说如何在eclipse下部署cas server 和 我在部署cas server时遇到的问题。