CAS分析——Core

根据官方介绍,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后,没有被使用了。

时间: 2024-09-02 19:34:30

CAS分析——Core的相关文章

用gdb分析core文件及常见gdb命令操作示例

1.概述 在实际的软件开发项目中,程序出现问题是在所难免的.遥想本人参加工作之后首次遇到程序的情景,至今还历历在目.之前的经验告诉我,我们越是惊慌失措,问题就越是解决不了.我们要先让自己平静下来,然后再寻找解决程序问题的办法. 在Linux下做开发的朋友,想必都与core文件打过交道.当看到自己的程序运行之后出现core时,很多人都慌乱了,仿佛天快要塌下来一样.其实,我们大可不必如此,只要我们掌握了用gdb调试core文件的办法,依然可以很快定位程序问题,一举将bug消灭掉.有关Linux co

gcc的 “-fpack-struct” 编译选项导致程序core dump的分析

感谢网友[nanxiao]的投稿 最近team引入gcov来做代码分析.编译好的程序在Solaris上运行的好好的,结果在Linux上一运行就会产生core dump文件.这篇文章就介绍整个分析过程. 首先用gdb分析core文件,显示是strlen调用出了问题: (gdb) #0 0x00000034e433386f in __strlen_sse42 () from /lib64/libc.so.6 #1 0x000000000053c57a in __gcov_init () #2 0x0

怎样用core文件调试你的linux程序?

core dump 文件对于诊断linux中程序的问题非常有用.当程序异常退出的时候,可能会生成core文件.如,程序写一个不属于他的内存,操作系统出于保护,会发信号给程序,程序可能会因此而退出,退出的时候可能会生成core文件.我们可以通过分析core文件,找出程序中那里有内存问题.这篇文章主要是阐述生成core文件需要做的一些设置. 如何生成core文件 默认linux操作系统是不允许生成core文件的.如下图: <img src="http://www.bo56.com/wp-con

Linux下core文件产生的一些注意问题

前面转载了一篇文章关于core文件的产生和调试使用的设置,但在使用有一些需要注意的问题,如 在什么情况 才会正确地产生core文件. 列出一些常见问题: 一,如何使用core文件 1. 使用core文件 在core文件所在目录下键入: gdb -c core 它会启动GNU的调试器,来调试core文件,并且会显示生成此core文件的程序名,中止此程序的信号等等. 如果你已经知道是由什么程序生成此core文件的,比如MyServer崩溃了生成core.12345,那么用此指令调试: gdb -c

Linux Debugging(八): core真的那么难以追踪吗?

本周遇到了好几个core都很有典型性.在这里和大家分享下. 相信有过Linux编程经验的人,肯定都遇到过.感觉周围人很多对core有天然的恐惧感,尤其对刚入行不久的同学来说.当然了,也有工作好几年看到core也束手无策的.今天就分析一下,core,其实大部分都是很容易解决的.如果一个core很难以复现,那么说明还是很复杂的,算是Corner case,可能需要很长时间,脑子里要有很好的运行时状态才可以(阅读源码,学习的是逻辑:将源码对应到运行时的状态,分析一些状态机的转换,再去分析可能会发生的情

gcc编译选项 -fpack-struct 致程序 core dump 原因及解决

最近team引入gcov来做代码分析.编译好的程序在Solaris上运行的好好的,结果在Linux上一运行就会产生core dump文件.这篇文章就介绍整个分析过程. 首先用gdb分析core文件,显示是strlen调用出了问题: (gdb) bt #0  0x00000034e433386f in __strlen_sse42 () from /lib64/libc.so.6 #1  0x000000000053c57a in __gcov_init () #2  0x000000000053

走向J2EE,漫长的道路

j2ee 初次涉及Java领域,感觉到Java入门是好像没有C,C++入门快,工具也没有什么Turbo C,Visual C++好用(自己的破机器实在陪不起JBuilder,贪婪的家伙,以后一定要收拾她).什么JAVA_HOME,CLASSPATH,虚拟机等概念都是初次基础,旁边的人都很少用Java的.感觉Java就是做Applet的.慢慢的知道了http://java.sun.com,开始知道Java博大精深.让我不可思议的是JAVA 2,JDK,J2SE,J2EE,J2ME等新名词在自己的脑

五个 Linux 下用户空间的调试工具

五个 Linux 下用户空间的调试工具 根据定义,调试工具是那些那些使我们能够监测.控制和纠正其他程序的程序.我们为什么应该用调试工具呢? 在有些情况下,运行一些程序的时候我们会被卡住,我们需要明白究竟发生了什么. 例如,我们正在运行应用程序,它产生了一些错误消息.要修复这些错误,我们应该先找出为什么产生这些错误的消息和这些错误消息从哪里产生的. 一个应用程序可能突然挂起,我们必须了解其他什么进程同时在运行.我们可能还必须弄清楚某个进程挂起的时候在做什么.为了剖析这些细节, 我们需要调试工具的帮

如何找出发生SEGV内存错误的程序

​问题 ​18-Feb-2014 15:48:45] WARNING: [pool www] child 11274 exited on signal 11 (SIGSEGV) after 0.089068 seconds from start 显然11274进程运行过程中遇到了段错误导致进程异常退出了.继续追查发现是php的hsf扩展在启动初始化的时候遇到内存问题导致段错误. 沧老师这个段错误进程你怎么定位到是hsf扩展的问题? 分析过程​发现段错误: 日志中的信息表明,进程号为11274的进