CAS分析——Core

简介: 根据官方介绍,CAS具有一些接口,这些接口是CAS的核心,那么我们来看看有那些关键性的类:在CAS中很多地方使用了策略模式,那么根据什么方式来确定使用哪种策略呢?在很多策略类中有一个support(Credentials c)的方法,所以可以看出是根据Credentails的类型来决定使用哪种策略的。

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

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

 

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.validation.Assertion

这个接口主要是定义了,验证服务返回的对象,就是一个断言,你这个ST有没有权限访问,以及TGT访问的ST认证对象

 

org.jasig.cas.web.bind.CredentialsBinder

这个是一个绑定器,将用户输入的信息或者从IE或者别的地方得到信息绑定到对应的凭证中去。使用spring web flew后,没有被使用了。



目录
相关文章
|
7月前
|
算法 Java 应用服务中间件
cas5.3:CAS Server搭建
cas5.3:CAS Server搭建
395 0
|
7月前
|
算法 Java
Java中CAS算法的集中体现:Atomic原子类库,你了解吗?
【5月更文挑战第15天】Java中CAS算法的集中体现:Atomic原子类库,你了解吗?
56 1
|
7月前
|
算法 安全 Java
深入探索Java中的并发编程:CAS机制的原理与应用
总之,CAS机制是一种用于并发编程的原子操作,它通过比较内存中的值和预期值来实现多线程下的数据同步和互斥,从而提供了高效的并发控制。它在Java中被广泛应用于实现线程安全的数据结构和算法。
88 0
|
7月前
|
数据库
CAS简介
CAS简介
78 1
|
7月前
|
安全 Java 程序员
【JavaEE】CAS(Compare And Swap)操作
【JavaEE】CAS(Compare And Swap)操作
|
缓存 安全 算法
JUC第四讲:Java中的锁/CAS原理与案例分析(上)
JUC第四讲:Java中的锁/CAS原理与案例分析
JUC第四讲:Java中的锁/CAS原理与案例分析(上)
什么是 CAS?Java 中如何使用 CAS
什么是 CAS?Java 中如何使用 CAS
|
缓存 算法 安全
JUC第四讲:Java中的锁/CAS原理与案例分析(下)
JUC第四讲:Java中的锁/CAS原理与案例分析
118 0
|
人工智能 移动开发 安全
【Java基础】CAS (Compare And Swap) 操作
CAS其实就是Compare And Swap的一个缩写,顾名思义就是比较并交换,其实就是把当前值与你预期的值进行一个比较,是一种用于在多线程环境下实现同步功能的机制。
|
Java API
Java的CAS操作
CAS 是乐观锁设计思想的实现。CAS 的思想是:在“读取 - 修改 - 写回”操作序列中,先读取并修改数据,写回数据前先判断读取数据后的这段时间内数据是否发生变化(共享变量的当前值是否是我们的期望值)。通过 CAS 我们可以以无锁的方式,保证对共享数据进行 “读取 - 修改 - 写回” 操作序列的正确性。
133 0