cas 认证管理器
CAS-默认的认证管理器:AuthenticationManagerImpl
<bean id="authenticationManager" class="org.jasig.cas.authentication.AuthenticationManagerImpl">
<property name="credentialsToPrincipalResolvers">
<list>
<bean class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver" >
<property name="attributeRepository" ref="attributeRepository" />
</bean>
<bean class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver" />
</list>
</property>
<property name="authenticationHandlers">
<list>
<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
p:httpClient-ref="httpClient" p:requireSecure="false"/>
<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
</list>
</property>
</bean>
这个bean,就是cas的核心类,认证管理器。
在cas中定义了两个术语:
credentials
即需要认证用户信息载体
例如在web应用中,用户通过前台界面输入用户名,密码,然后经cas认证成功或失败。
这个credentials它的其中一个实现类 org.jasig.cas.authentication.principal.UsernamePasswordCredentials,
就代表了持有前台输入的用户名以及密码
Principal cas认证后返回的信息载体,默认只返回用户名
authenticationHandlers。
从字面意思可以看出是认证处理器,即cas如何对于用户信息进行认证,即到哪里去认证;
credentialsToPrincipalResolvers对于认证之后的用户信息转换为principal的转换解析器。
这两个属性都是list既可以配置多个。
在cas认证过程中逐个执行authenticationHandlers中配置的认证管理,直到有一个成功为止,
然后在执行credentialsToPrincipalResolvers过程直到有一个成功为止。
这是cas认证管理器的默认配置,我们从上面的分析会发现,默认配置在进行认证及转换解析是低效的,
原因是它要执行两次for循环(当然这个低效也是相对的),那么是否可以提交应用效率呢?答案是肯定的。
cas的认证管理器有三个实现类
org.jasig.cas.authentication.AuthenticationManagerImpl;
org.jasig.cas.authentication.DirectMappingAuthenticationManagerImpl;
org.jasig.cas.authentication.LinkedAuthenticationHandlerAndCredentialsToPrincipalResolverAuthenticationManager
第一个是默认实现类,第二个和第三个可以用来提高效率实现。
对于普通的不追求性能的系统来说,cas的默认认证管理器是最合适不过了,它非常的灵活,易于扩展,
只需要追加认证管理器与principal转换解析器就可以了,而无需关心其他。
而在我们追求性能,而且需要对一种credentials进行多次认证处理(例如对于用户名密码组合从多个数据源进行验证),
我们可以应用LinkedAuthenticationHandlerAndCredentialsToPrincipalResolverAuthenticationManager认证管理器;
而对于不同credentials进行认证处理,我们可以应用DirectMappingAuthenticationManagerImpl认证管理器。
LinkedAuthenticationHandlerAndCredentialsToPrincipalResolverAuthenticationManager从类名可以猜出它是将认证处理器与转换解析器进行对应实质上它就是做这件事件的,即将一个authenticaltionHandler指定一个credentialToprincipalResolver。
它的一般配置与如下类似
<bean id="authenticationManager" class="org.jasig.cas.authentication.LinkedAuthenticationHandlerAndCredentialsToPrincipalResolverAuthenticationManager">
<constructor-arg name="linkedHandlers" ref="authenticationHandlersAndPrincipalResolversMap" />
</bean>
<util:map id="authenticationHandlersAndPrincipalResolversMap">
<entry key-ref="httpBasedAuthenticationHandler">
<bean class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver" />
</entry>
<entry key-ref="ldapBindAuthenticationHandler">
<bean class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver">
<property name="attributeRepository" ref="attributeRepository" />
</bean>
</entry>
<entry key-ref="ldapFastBindAuthenticationHandler">
<bean class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver">
<property name="attributeRepository" ref="attributeRepository" />
</bean>
</entry>
</util:map>
DirectMappingAuthenticationManagerImpl,它有一个private Map<CLass <? extends Credentials>,
DirectAuthenticationHandlerMappingHolder> credentialsMapping属性,
即对每一种credentials绑定一个DirectAuthenticationHandlerMappingHolder,
而DirectAuthenticationHandlerMappingHolder实质就是持有一个认证处理器与一个pricipal转换解析器,这样就能将credentials,
认证处理器与转换解析器进行绑定,它的一般配置类似如下:
<bean id="authenticationManager" class="org.jasig.cas.authentication.DirectMappingAuthenticationManagerImpl">
<property name="credentialsMapping">
<map>
<entry key="org.jasig.cas.authentication.principal.UsernamePasswordCredentials">
<bean class="org.jasig.cas.authentication.DirectMappingAuthenticationManagerImpl.DirectAuthenticationHandlerMappingHolder"
p:authenticationHandler-ref="ldapHandler"
p:credentialsToPrincipalResolver-ref="ldapResolver" />
</entry>
<entry key="org.jasig.cas.adaptors.x509.authentication.principal.X509CertificateCredentials">
<bean class="org.jasig.cas.authentication.DirectMappingAuthenticationManagerImpl.DirectAuthenticationHandlerMappingHolder"
p:authenticationHandler-ref="certHandler"
p:credentialsToPrincipalResolver-ref="certResolver" />
</entry>
</map>
</property>
</bean>
cas 认证管理器的更多相关文章
- 使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器
从kbmmw 4.4 开始,增加了认证管理器,这个比原来的简单认证提供了更多的功能.细化了很多权限操作. 今天对这一块做个介绍. 要做一个认证管理,大概分为以下5步: 1. 定义你要保护的资源,一般 ...
- KbmMW 认证管理器说明(转载)
这是kbmmw 作者关于认证管理器的说明,我懒得翻译了,自己看吧. There are 5 parts of setting up an authorization manager: A) Defin ...
- 宣布 Windows Azure 通过 PCI DSS 合规性验证并且 ISO 认证范围扩大,同时正式发布 Windows Azure Hyper-V 恢复管理器和其他更新功能
今天,我们高兴地宣布两个重大里程碑事件,客户将能借此提高基于 Windows Azure 构建安全且合规的应用程序的能力.此外,我们还宣布正式发布 Windows Azure Hyper-V 恢复管理 ...
- com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: 为队列管理器提供的安全性认证无效
com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: 为队列管理器“zm_queue_manager”提供的安全性认证无效, ...
- ASP.NET MVC 认证模块报错:“System.Configuration.Provider.ProviderException: 未启用角色管理器功能“
新建MVC4项目的时候 选 Internet 应用程序的话,出来的示例项目就自带了默认的登录认证等功能.如果选空或者基本,就没有. 如果没有,现在又想加进去,怎么办呢? 抄啊.将示例项目的代码原原本本 ...
- 【XLL 文档翻译】【第1部分】 Add-in 管理器 和 XLL 接口函数
xlAddInManagerInfo/xlAddInManagerInfo12 在 Excel 会话中,每一次调用 Add-In 管理器时,系统会调用这两个函数.此函数可以在 Add-In 管理器中提 ...
- Oracle 11g 中恢复管理器RMAN介绍
这是我平时摘录的笔记,从管理艺术那本书上摘录出来的,放到这里 RMAN 可在数据库服务器的帮助下从数据库内备份数据文件,可构造数据文件映像副本.控制文件和控制文件映像.对当日志 SPFILE 和RMA ...
- JMeter学习(二十五)HTTP属性管理器HTTP Cookie Manager、HTTP Request Defaults
Test Plan的配置元件中有一些和HTTP属性相关的元件:HTTP Cache Manager.HTTP Authorization Manager.HTTP Cookie Manager.HTT ...
- 【jmeter】HTTP属性管理器HTTP Cookie Manager、HTTP Request Defaults
Test Plan的配置元件中有一些和HTTP属性相关的元件:HTTP Cache Manager.HTTP Authorization Manager.HTTP Cookie Manager.HTT ...
随机推荐
- 20145310《网络对抗》Exp2 后门原理与实践
实验内容 (1)使用netcat获取主机操作Shell,cron启动,使用socat获取主机操作Shell, 任务计划启动. (2)使用MSF meterpreter生成可执行文件,利用ncat或so ...
- 20145330 《网络攻防》 MSF基础应用
20145330 <网络攻防> MSF基础应用 1.实验后回答问题 (1)用自己的话解释什么是exploit,payload,encode. exploit:进行渗透攻击的模块合集 pay ...
- MFC、Qt、C#跨线程调用对象
MFC.Qt.C#都是面向对象的编程库 1.MFC不允许跨线程调用对象,即线程只能调用它本身分配了空间的对象 In a multi-threaded application written using ...
- 常用模块之 shutil,json,pickle,shelve,xml,configparser
shutil 高级的文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件中 import shutil shut ...
- DSDS,双模,双卡,双待,单待,双通,单通,概念及相互关系?【转】
本文转载自:https://blog.csdn.net/dirk_it/article/details/7178058?utm_source=blogxgwz9 DSDS:双卡双待 DualSimDu ...
- Java中++,--,前缀后缀表达值的不同,与^的值计算
package 习题1; /** * ++ -- 与 ^ 的一些计算 * @author SeeClanUkyo * */ public class Test4 { public static voi ...
- 如何在Twitter开发者平台上注册自己的应用
1.打开twitter的官网https://dev.twitter.com,如果还没有注册账号的,需要注册账号,已经注册账号的,请先登录:2.选择其中的My apps,如下图: 3.进去界面,选择Cr ...
- YOLO(Darknet官方)训练分类器
目录 1. 分类数据准备 2. Darknet配置 3. Darknet命令使用 4. cifar-10 使用示例 1. 分类数据准备 需要的文件列表: 1. train.list : 训练的图片的绝 ...
- 机器学习 MLIA学习笔记(二)之 KNN算法(一)原理入门实例
KNN=K-Nearest Neighbour 原理:我们取前K个相似的数据(排序过的)中概率最大的种类,作为预测的种类.通常,K不会大于20. 下边是一个简单的实例,具体的含义在注释中: impor ...
- webpack4试水总结
看了官方的升级通告,据说webpack4的打包效率提升近一倍,于是最近在项目分支上升级了下webpack4,过程中的一些报错及问题简单整理下,以供交流. 在之前的旧项目上单纯的升级webpack版本后 ...