码迷,mamicode.com
首页 > 其他好文 > 详细

CAS集成源码解析

时间:2018-10-20 17:29:06      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:com   分享   tps   ati   info   客户   客户端   直接   spring   

CAS是其中一种SSO(单点登录)的实现,可以用做企业单点登录系统的集成。

CAS主要分为两个部分cas-server和cas-client,分别是集成在服务端(中央票据校验)和客户端(集成应用的子系统)。在应用改造层面,要先了解cas-server和cas-client的主要类和基本实现构架。

技术分享图片

 

先从cas-client说起,cas-client主要要做的集成工作就是引入cas客户端的依赖,然后在web.xml中配置过滤器,过滤器会根据url来对来到cas-client的请求进行处理(转发或者直接进入系统)。对于cas-client的代码改造工作也大部分会在这几个过滤器中完成,在里面加入自己的业务需求。

web.xml有四个比较关键的过滤器:SingleSignOutFilter,CasAuthenticationFilter,Cas20ProxyReceivingTicketValidationFilter(cas20指的是用cas2.0协议,不同版本的cas这个类会不同),HttpServletRequestWrapperFilter;

1. SingleSignOutFilter 这个类放在第一个,判断url是否为登出请求,会做出一些清除票据信息和登录信息的操作;(为什么这个类要放在第一个?个人理解:如果是登出请求,后面的过滤器几乎完全没有必要走了,必须转发到cas服务器中做出申请票据什么的);

2. CasAuthenticationFilter 这个类根据assertion是否为空来判断是否重定向至cas服务器进行登录验证(可以根据自己系统的需求增加不进行拦截的url(例如放行同步,级联,pki登录等流程));

3. Cas20ProxyReceivingTicketValidationFilter 负责对Service Ticket的校验工作 底层通过HttpsURLConnection来完成后台校验Service Ticket 然后将获得的assertion放在会话中,方便子系统的下次跳转;

4. HttpServletRequestWrapperFilter 这个类是一个包装类,个人理解的不深入,有一个目的是允许通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,这个东西可以为以后的业务处理提供十分多的便利;

知道了这些入口流程类的话,一步一步往下看就比较容易了,细节之处就不深入分析了,在代码中还是比较容易理解的;

然后看看cas-server的主要骨架,cas-server中我觉得最关键的地方是用了spring-mvc的web-flow,当请求url进来spring webflow之后,定义了每一步的流程,跟着这个webflow一步步看下去,cas-server的大致流程就很好理解了。Spring-webflow有以下的关键类:

1. AuthenticationViaFormAction 验证登录方式(用户名密码)然后生成ticketGrantingTicket(tgt 这个东西是整个单点登录中最关键的)放在flow scope和Request scope中;(这两个scope是spring mvc里面的概念)

2. SendTicketGrantingTicketAction 将tgt放进浏览器的Cookie中

3. GenerateServiceTicketAction 验证tgt的有效性 根据tgt和service(cas-client子系统)生成Service Ticket

掌握了这些cas的至关重要的入口类之后,继续深入研究cas也会变得更加容易了。

由于直接这么描述源码会比较抽象,对cas的用法也难以理解,会另开一文来总结一下cas的大致流程。

 

CAS集成源码解析

标签:com   分享   tps   ati   info   客户   客户端   直接   spring   

原文地址:https://www.cnblogs.com/kobebyrant/p/9822293.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!