单点登录:用户在单点登录成功后,会访问某一平台模块,1. 向客户端发送一个请求(免密登录接口),请求客户端接口会携带一个ticket,类似于:http//:ip:port:xxx?ticket=xxxx
1. 这个请求会被客户端配置的EKPSSOCLIENT的过滤器拦截,读取配置文件sso-config.properties,获取过滤器链(CASURLFilter、UsernameCoverFilter、SSOLoginRedirectFilter)这三个子过滤器。
从session中获取username
根据username和parameter初始化一个EKPSSOContext容器
初始化完成并创建EKPSSOChain对象,并跳转到配置的子过滤器
跳转三个子过滤器的核心接口
第一个进入CASURLFilter过滤器,校验是否携带ticket票据。并校验url是否合法(是否加入白名单)。
校验票据是否合法,合法则从解析后的ticket中获取用户名。并将username用户名保存到context容器中
进入第二个过滤器(UsernameCoverFilter)用户转换过滤器
比照用户名是否被篡改(第一次和蓝凌握手)
并将客户端的username和蓝凌的username分别存放到容器中
进入第三个过滤器(LoginSSORedirectFilter)
由于我们是单向的单点(这个过滤器和我们关系不大)
作用:校验是否登录,没有登录则调整到SSO的登录页面。、
第二次和SSO系统握手,再次校验双方信息是否对等。
再次将用户名保存到容器中
至此SSO单点登录(基于ticket方式)校验完成,进去我们的免密登录接口。免密登录成功后则完整的单点登录完成。