文档章节

CAS研究(三)-公用API分析(未完)

abcijkxyz
 abcijkxyz
发布于 2016/07/08 16:31
字数 1313
阅读 3
收藏 0

根据官方介绍,CAS具有一些接口,这些接口是CAS的核心,那么我们来看看有那些关键性的类:

在CAS中很多地方使用了策略模式,那么根据什么方式来确定使用哪种策略呢?在很多策略类中有一个support(Credentials c)的方法,所以可以看出是根据Credentails的类型来决定使用哪种策略的。所以我们在AuthenticationHandler,CredentialsToPrincipalResolver,CredentialsBinder这些都可以看到support(Credentials c)方法。

下面是公用API列表,我们来一个个介绍这些接口的作用吧。

  • org.jasig.cas.CentralAuthenticationService:CAS核心,提供给HTTP,Web HTML, Web Services, RMI或者其他请求使用。能够创建,存储,验证和验证票据信息。
  • 具有几个方法:

    1)String createTicketGrantingTicket(Credentials credentials)
            throws TicketException
    :根据凭证对象来创建一个TGT票据,那么凭证怎么来的呢?就是页面输入的信息,现在知道为啥TGT是和用户相关的凭证了吧。

    2) String grantServiceTicket(String ticketGrantingTicketId, Service service)
            throws TicketException
    :更具TGT和service来创建ST,从前面我们知道service就是接入的应用系统,那么ST就是用户(TGT)访问的service的票据。

    3) String grantServiceTicket(final String ticketGrantingTicketId,final Service service, final Credentials credentials)
            throws TicketException
    :这个是干嘛的呢?有待研究啊。。。。。。
    4)Assertion validateServiceTicket(final String serviceTicketId, final Service service) throws TicketException:很容易理解是不是,就是验证ST的,那么怎么返回一个Assertion对象,哦,对了,在前面介绍客户端配置票据验证的时候,是不是验证通过后会有一个xml格式的数据?明白了吧,就是个那个地方使用的。

    5) void destroyTicketGrantingTicket(final String ticketGrantingTicketId):没啥好说了,票据不会一直创建下去,用户也不是一直在线,总需要退出,就算不退出也有一个时间限制吧,这个就是给登出或者超时后销毁和用户相关的TGT票据使用滴。

    6) String delegateTicketGrantingTicket(final String serviceTicketId,  final Credentials credentials) throws TicketException:文档说是给代理使用的,不是很明白,有待研究啊。。。。。。

  • org.jasig.cas.authentication.handler.support.AbstractUsernamePasswordAuthenticationHandler
  • org.jasig.cas.authentication.handler.AuthenticationHandler::这个很好理解,就是实际验证的,只有两个方法:boolean authenticate(Credentials credentials)和 boolean supports(Credentials credentials)后面这个是不是很熟悉啊,对了,就是前面提到的策略模式中的supports方法,怎么认证方法只会返回true和false啊,那么用户信息怎么取得呢?别急嘛,右面有个CredentialsToPrincipalResolver接口专门来做这个事情滴。
  • org.jasig.cas.authentication.handler.PasswordEncoder:密码转换器
  • org.jasig.cas.authentication.principal.Credentials:取得客户输入的数据,或者可以理解为用户认证的凭据。就是需要认证用户身份需要的数据,每种认证方式需要信息是不一样的。这个只是一个类型接口,就是没有任何方法的接口啦。
  • org.jasig.cas.authentication.principal.CredentialsToPrincipalResolver:上面我们说到,Credentials对象是从界面或者别的什么地方取得用户信息,那么用户信息通过认证后怎么转换为Principal对象呢,这个就是这个解析器的作用了,由于认证本身是没有返回用户信息的,只是确定人中通过还是没有通过,所以取得用户信息需要另外一个非常重要的接口PersonAttributeDao,这个接口其实并不在CAS核心接口中的,是在一个叫person-directory-api-1.5.0-RC6.jar中的,这个包里面只有两个类,两个接口,那么实现有那些呢?是在person-directory-impl-1.5.0-RC6.jar,这个里面内容很丰富的。基本上你能想到的所有能取得用户信息的地方都有实现了。这个接口,也是一个策略,只有两个方法:supports , Principal resolvePrincipal(Credentials credentials),后面这个接口是不是很一目了然了?你可以理解我解析,或者更贴切点叫转换。
  • org.jasig.cas.authentication.principal.Principal:这个主要是保存认证后的用户信息。扩展信息放在一个Map中的。
  • org.jasig.cas.authentication.principal.Service:这个接口定义了和客户端相关的方法,例如登出服务器logOutOfService等动作。logOutOfService就是单点登出时候,怎么在服务器端登出所有访问过的客户端啦。
  • org.jasig.cas.authentication.principal.UsernamePasswordCredentials:用户用户名和密码访问的Credentials实现。
  • org.jasig.cas.authentication.Authentication:认证对象,就是一次认证后的结果对象,那么为啥不使用Principal对象来作为认证结果呢?第一不是每次认证都是合法用户,对于不合法用户怎么办呢?其次,认证是一个动作,和这个动作本身相关的信息显然和用户信息是没有关系,例如认证时间。这个接口将Principal对象做了一次包装。也就是说可以通过Authentication接口可以访问到Principal对象。
  • org.jasig.cas.authentication.AuthenticationManager
  • org.jasig.cas.authentication.AuthenticationMetaDataPopulator
  • org.jasig.cas.ticket.proxy.ProxyHandler
  • org.jasig.cas.ticket.registry.TicketRegistry
  • org.jasig.cas.ticket.registry.RegistryCleaner
  • org.jasig.cas.ticket.registry.AbstractTicketRegistry
  • org.jasig.cas.ticket.ExpirationPolicy
  • org.jasig.cas.util.UniqueTicketIdGenerator
  • org.jasig.cas.validation.ValidationSpecification
  • org.jasig.cas.validation.Assertion:这个接口主要是定义了,验证服务返回的对象,就是一个断言,你这个ST有没有权限访问,以及TGT访问的ST认证对象。
  • org.jasig.cas.web.bind.CredentialsBinder:这个是一个绑定器,将用户输入的信息或者从IE或者别的地方得到信息绑定到对应的凭证中去。使用spring web flew后,没有被使用了。

本文转载自:http://blog.csdn.net/yuwenruli/article/details/6620463

共有 人打赏支持
abcijkxyz
粉丝 63
博文 6196
码字总数 1876
作品 0
深圳
项目经理
私信 提问
[工作日志]2017-03-14

Keep:今日完成了哪些工作 sprint 分析 hiweb监控研究集成 Problem:遇到了什么问题? Try:准备尝试哪些措施 今日未完 Plan:明日的任务 sprint1 评审...

hiheathy
2017/03/15
1
0
本周突破了CAS-Acegi整合,dwr,JFreechart,JasperReport

本周在项目中解决的问题真是不少,因此大发感慨,如果工资的增长速度能跟技术的增长速度就好了.本周主要完成的工作如下: (1) 上周末在同一机器上实现了Cas服务器和两个基于Acegi的Web应用的单点...

迷途d书童
2012/03/09
245
0
[工作日志]2017-02-14

Keep:今日完成了哪些工作 1.bug修复完成。100% 2.与产品讨论患者端修改内容。80% 3.研究mvp+databinding框架.50% Problem:遇到了什么问题? Try:准备尝试哪些措施 今日未完 无 Plan:明日...

我的名字魏帅
2017/02/14
1
0
不切割DNA的CRISPR终于诞生!有望攻克肾病、糖尿病等常见病

  近年来,随着科学家们对基因编辑技术的不断探索,锌指核酸内切酶(ZFN)、TALEN 技术相继被发现并应用。而CRISPR-Cas系统一经发现,就因其简便的操作、精准的 DNA 靶向及剪切功能,被生物...

DeepTech深科技
2017/12/14
0
0
如何分析一个项目

数据表研究 大概知道项目的情况 数据表数据研究 进一步知道项目情况 动态数据研究 添加删除,进行一些操作,看看数据的变化。通过变化的数据,来分析项目的功能与内部的奥秘 代码研究 大致知...

桃子红了呐
2016/05/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

矿难让显卡压了那么多货咋办?NV如是说

在苏州 GTC 开幕的几天前,英伟达刚刚遭遇了一次股价的腰斩。 近来加密货币的热度渐低,受到挖矿热潮照顾许多的英伟达「矿机」销量受到打击,甚至出现了严重的库存危机,加上近来刚刚发的 RT...

linux-tao
10分钟前
0
0
Python学习日记5|BeautifulSoup中find和find_all的用法

Python学习日记5|BeautifulSoup中find和find_all的用法 是蓝先生 关注 2016.04.20 11:26* 字数 930 阅读 37205评论 11喜欢 10 今天是4.20号。 前天晚上看到蒋方舟的一句话: 不要左顾右盼。慢...

linjin200
11分钟前
0
0
浅析Vue.js 中的条件渲染指令

1 应用于单个元素 Vue.js 中的条件渲染指令可以根据表达式的值,来决定在 DOM 中是渲染还是销毁元素或组件。 html: <div id="app"><p v-if="type===1">拌面</p><p v-else-if="type==...

开元中国2015
11分钟前
0
0
聊天机器人最难理解的 10 个词汇

简评:现在,越来越多的「聊天机器人」凭借着人工智能能与人类对话,甚至编写新闻。人们该如何判断对方是一个血肉之躯,还是一个可笑的算法?又该如何判断一个小说故事是由一台机器编写的,而...

极光推送
17分钟前
0
0
开源 java CMS - FreeCMS2.8会员我的评论

项目地址:http://www.freeteam.cn/ 我的评论 从左侧管理菜单点击我的评论进入。在这里可以查看当前登录会员的所有评论记录。 删除评论 选择评论然后点击删除按钮可以完成删除操作。 为了防止...

freeteam
40分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部