在实际应用中,用户认证信息一般会存放在RDBMS或LDAP中,这样能够更好的保证系统的安全性。本节将采用RDBMS的存储方式,通过一个简单的实例展示其使用方法。
1.准备环境
操作系统:32位Window XP
CAS服务器:Cas Server 3.3.3
CAS客户端:Cas Client 3.1.10
Web服务器:Tomcat 6.0.18
数据库:MySQL 5.0
2.准备数据库
2.1.创建数据库
create database cas CHARSET=utf8;
2.2.创建用户表
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,
`sex` varchar(2) NOT NULL,
`age` int(4) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.3.准备数据
INSERT INTO `users` VALUES ('1', 'admin', '21232f297a57a5a743894a0e4a801fc3', '男', '26');
INSERT INTO `users` VALUES ('2', 'javaee', '21232f297a57a5a743894a0e4a801fc3', '男', '26');
密码均为admin 。
3.添加数据库信息
打开cas3的WEB-INF/cas.properties文件,添加数据库相关信息:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/cas?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
jdbc.username=root
jdbc.password=root
cas.auth.sql=select u.password from users u where lower(u.username) = lower(?)
其中,url、username、password根据实际情况进行修改。
4.添加Jar包
MySQL数据库JDBC支持包:mysql-connector-java-5.1.9.jar
DBCP连接池支持包:commons-pool-1.2.jar、commons-dbcp- 1.2.1.jar
QueryDatabaseAuthenticationHandler使用Spring JDBC支持包:spring-jdbc-2.5.6.jar
JDBC认证处理器实现支持:cas-server-support-jdbc-3.3.3.jar
5.配置数据库认证
5.1.认证管理器
在讲解如何使用数据库认证之前,让我们先来了解一下AuthenticationManagerImpl对象authenticationManager。authenticationManager对象用于认证用户信息,在用户登录CAS时,将会使用该认证管理器进行认证。
AuthenticationManagerImpl实现了AuthenticationManager接口,接口定义如下:
public interface AuthenticationManager {
String AUTHENTICATION_METHOD_ATTRIBUTE = "authenticationMethod";
Authentication authenticate(final Credentials credentials)
throws AuthenticationException;
}
AuthenticationManagerImpl借助于AuthenticationHandler集合List<AuthenticationHandler>和CredentialsToPrincipalResolver集合List<CredentialsToPrincipalResolver>完成对用户的认证工作。AuthenticationHandler负责完成用户的认证工作,而CredentialsToPrincipalResolver负责构建认证结果。
对于配置了多个AuthenticationHandler的实现,一旦其中一个认证处理器认证通过,其他认证处理器将不再执行。配置了多个CredentialsToPrincipalResolver的处理方式与AuthenticationHandler一致。
至此,我们认识到如果要实现RDBMS认证,必须提供相应的AuthenticationHandler实现方式。那么具体需要如何来实现,CAS为我们提供了基本的JDBC支持包cas-server-support-jdbc-3.3.3.jar。在CAS中引入该包后,使用其实现类org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler将满足我们的需要。接下来,我们开始进行配置:
5.2.修改配置文件deployerConfigContext.xml
打开cas3的WEB-INF/deployerConfigContext.xml文件
5.2.1.添加dbcp数据源配置
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
-
<property name="driverClassName" value="${jdbc.driver}" />
-
<property name="url" value="${jdbc.url}" />
-
<property name="username" value="${jdbc.username}" />
-
<property name="password" value="${jdbc.password}" />
-
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
5.2.2.添加MD5加密编码器
- <bean id="passwordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
-
<constructor-arg value="MD5" />
-
</bean>
<bean id="passwordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
<constructor-arg value="MD5" />
</bean>
5.2.3.添加RDBMS认证处理器
替换authenticationHandlers中的SimpleTestUsernamePasswordAuthenticationHandler认证处理器,代码如下:
- <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
-
<property name="dataSource" ref="dataSource" />
-
<property name="sql" value="${cas.auth.sql}" />
-
<property name="passwordEncoder" ref="passwordEncoder" />
-
</bean>
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="dataSource" ref="dataSource" />
<property name="sql" value="${cas.auth.sql}" />
<property name="passwordEncoder" ref="passwordEncoder" />
</bean>
5.2.4.验证配置
经过以上几个步骤,对于数据库认证的配置已经完成。接下来,我们启动Tomcat进行测试。启动完毕后,使用admin或javaee用户登录CAS认证服务器,如果登录成功,我们将会在Tomcat日志中看到类似信息:
从日志信息中可以看到,我们的确成功的借助于QueryDatabaseAuthenticationHandler对用户进行了认证。
分享到:
相关推荐
CAS(Central Authentication Service)是一款不错的针对 Web 应用的单点登录框架,本文介绍了 CAS 的原理、协议、在 Tomcat 中的配置和使用,对于采用 CAS 实现轻量级单点登录解决方案的入门读者具有一定指导作用。
CAS 是 Central Authentication Service 的缩写 —— 中央认证服务,一种独立开放指令协议,是 Yale 大学发起的一个企业级开源项目,旨在为 Web 应用系统提供一种可靠的 SSO 解决方案。 CAS 支持以下特性: CAS v1, ...
赠送jar包:datanucleus-rdbms-3.2.9.jar; 赠送原API文档:datanucleus-rdbms-3.2.9-javadoc.jar; 赠送源代码:datanucleus-rdbms-3.2.9-sources.jar; 赠送Maven依赖信息文件:datanucleus-rdbms-3.2.9.pom; ...
赠送jar包:datanucleus-rdbms-4.1.7.jar; 赠送原API文档:datanucleus-rdbms-4.1.7-javadoc.jar; 赠送源代码:datanucleus-rdbms-4.1.7-sources.jar; 赠送Maven依赖信息文件:datanucleus-rdbms-4.1.7.pom; ...
oracle-rdbms-server-11gR2-preinstall-1.0-4.el7.x86_64.rpm
解决datax mysql8兼容性问题
【RAC】 RAC For W2K8R2 安装--RDBMS软件的安装(五).pdf【RAC】 RAC For W2K8R2 安装--RDBMS软件的安装(五).pdf【RAC】 RAC For W2K8R2 安装--RDBMS软件的安装(五).pdf
在Linux上安装oracle数据库,... 在oracle linux 6_64bit上,提供了oracle-rdbms-server-11gR2-preinstall包,可以自动化的将需要安装的rpm包,需要调整的内核参数自动化的处理,对DBA安装数据库确实节省了不少的时间。
Intro to Graph Databases Episode #4 - (RDBMS+SQL) to (Graphs+Cypher).mp4
Definitive-Guide-Graph-Databases-for-RDBMS-Developer 官方指南从图库Neo4j抽取到关系型数据库,或从关系型数据库抽取到图数据库
数据仓库专用引擎-Teradata RDBMS.DOC
开源项目-achiku-testable-go-rdbms.zip,GitHub - achiku/testable-go-rdbms: Sample setup for testable Go RDBMS backed application
资源来自pypi官网。 资源全名:opal-azure-cli-rdbms-0.3.13.tar.gz
资源来自pypi官网。 资源全名:azure-mgmt-rdbms-1.6.0.zip
针对上述方案和算法,结合典型开源RDBMS-MySQL实例,对上述关系有向图模型的生成、基于有向图模型的转换算法以及数据迁移算法应用进行验证,实验结果表明RDBMS可以按照一定的数据结构平滑地迁移到MongoDB中。
资源来自pypi官网。 资源全名:azure-mgmt-rdbms-8.1.0b2.zip
oracle12c 官方预安装检测包 使用说明https://blog.csdn.net/ljunjie82/article/details/42201473
datax-common ; plugin-rdbms-util
RDBMS--MYSQL--1.MYSQL初始化--6.mysql_5.7初始化.pdf
2015 Oracle 技术嘉年华(OTN)分会场8朱金宝 - RDBMS&NoSQL统一数据建模