3.CAS从数据库获取用户信息

本文详细介绍如何在CAS中集成数据库用户认证,包括配置数据源、自定义认证处理器等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CAS从数据库获取用户信息


1.1特别说明

      由于考虑到后面的博文,所以在这里我们直接将工程弄到eclipse下去进行定制修改可能会更方便一些。我这是在项目中直接使用,可能基本上说的都是一些实战过程,

对原理方面介绍的少,毕竟大家大多数人想要的是拿着就上手的,不好之处还请大家谅解,多多指正一起交流。

1.2 准备工作

      (1)创建maven工程转成WEB项目(我的项目名:cas-sample)

      (2)解压cas-server-webapp-4.0.0.war

      (3)将解压后的文件全部拷贝到:src->main->webapp下,将classes拷贝到src/main/resource下

      (4)或者直接导入工程:cas-server-webapp,导入方式选择Maven即可

1.3开始CAS之旅

第一部分:


      在WEB-INF找到deployerConfigContext.xml,该文件是CAS发布部署配置文件,打开deployerConfigContext.xml,很多人可能在上一篇博文中有所疑惑,登录的时候

用户名与密码在哪呢?就在deployerConfigContext.xml文件里面,往下看你就明白啦。

      (1)注释以下代码
<bean id="primaryAuthenticationHandler"
          class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
        <property name="users">
            <map>
                <entry key="casuser" value="Mellon"/>
            </map>
        </property>
    </bean>

      (2)在配置文件中增加以下配置
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		init-method="init" destroy-method="close">
		<property name="url" value="${a_jdbc.url}" />
		<property name="username" value="${a_jdbc.username}" />
		<property name="password" value="${a_jdbc.password}" />
		<property name="driverClassName" value="${a_jdbc.driver}" />

		<!-- 配置初始化大小、最小、最大 -->
		<property name="initialSize" value="${a_jdbc.pool.minIdle}" />
		<property name="minIdle" value="${a_jdbc.pool.minIdle}" />
		<property name="maxActive" value="${a_jdbc.pool.maxActive}" />

		<!-- 配置获取连接等待超时的时间 -->
		<property name="maxWait" value="${a_jdbc.pool.maxWait}" />

		<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
		<property name="timeBetweenEvictionRunsMillis" value="${a_timeBetweenEvictionRunsMillis}" />

		<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
		<property name="minEvictableIdleTimeMillis" value="${a_minEvictableIdleTimeMillis}" />

		<property name="validationQuery" value="SELECT 'x' FROM DUAL" />
		<property name="testWhileIdle" value="true" />
		<property name="testOnBorrow" value="false" />
		<property name="testOnReturn" value="false" />

		<!-- 打开PSCache,并且指定每个连接上PSCache的大小(Oracle使用) -->
		<!-- <property name="poolPreparedStatements" value="true" /> <property 
			name="maxPoolPreparedStatementPerConnectionSize" value="20" /> -->
		<!-- removeAbandoned功能自动检测连接打开超过指定时间未被使用自动关闭 时间单位为秒,logAbandoned设置关闭是否输出日志 -->
		<!-- <property name="removeAbandoned" value="false" /> <property name="removeAbandonedTimeout" 
			value="1800" /> <property name="logAbandoned" value="true" /> -->
		<!-- 配置监控统计拦截的filters -->
		<property name="filters" value="stat" />
	</bean>

<bean id="customAuthHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"  
      p:dataSource-ref="dataSource"  
      p:sql="select password from user where loginname=?" />

      (3)修改以下配置,将圈红处修改为:customAuthHandler



      (4)在cas.properties增加以下配置

a_jdbc.driver=com.mysql.jdbc.Driver
a_jdbc.url=jdbc:mysql://localhost:3306/cassso?useUnicode=true&characterEncoding=utf8
a_jdbc.username=root
a_jdbc.password=root
a_jdbc.pool.minIdle=10
a_jdbc.pool.maxActive=50
a_jdbc.pool.maxWait=60000
a_timeBetweenEvictionRunsMillis=60000
a_minEvictableIdleTimeMillis=300000

      (5)在WEB-INF lib中加入mysql驱动包,以及cas-server-support-jdbc-4.0.0.jar

      (6)在pom.xml中加入以下依赖

<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.14</version>
		</dependency>

      (7)启动TOMCAT运行成功,在浏览器上输入:http://localhost:8080/cas-sample,输入你数据库中的用户名密码登录,恭喜你已经完成啦。

第二部分:

      通过上第一部分内容,我们已经完成了对数据库中的用户进行登录。但是实际项目中,不可能这么简单的,接下来我们就自定义认证处理器,

这就是为什么一开始我就把CAS弄到eclipse中了吧。好了言归正传。让我们先了解下第一部分使用的类层次结构。

点击:org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler ,直接使用快捷键F4,如果快捷键不好用的话,在eclipse工具栏上点击:

Navigate->Open type Hierarchy,我们能看到最顶层的接口是:AuthenticationHandler,CAS提供了一些子类,

例如:AbstractUsernamePasswordAuthenticationHandler,AbstractJdbcUsernamePasswordAuthenticationHandler ,在定义认证处理器的时候,

根据不同需要选择即可,其余的我就不多说了,毕竟我们要的是快速实战,领导还在后面催着呢,就直接进入主题了,要是个人有兴趣可以一起探讨。

      (1)创建包:org.chengli.cas,再创建类:CustomAuthenticationHandler 继承 AbstractUsernamePasswordAuthenticationHandler或

者AbstractJdbcUsernamePasswordAuthenticationHandler都可以。

      (2)实现authenticateUsernamePasswordInternal方法。返回值是一个HandlerResult,如果对返回值不是清楚,可以参考:org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler 类中的实现。

      具体实现内容我这里就不细写了,相信大家到这里都应该知道怎么处理了。如果有不清楚的,留言一起讨论。目前我的项目结构:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值