`

单点登录 - CAS【二】数据库认证

 
阅读更多

一、CAS客户端配置                                                                                                                  

       新建两个WEB工程,从cas-client-3.2.1\modules导入jar包

       cas-client-core-3.2.1.jar
       commons-logging-1.1.jar

       WEB工程的web.xml中需要添加的内容参看上篇文章中提到的咖啡兔的配置文章,再次不再赘述。

 

 

上面的初体验仅仅是简单的身份验证,实际应用中肯定是要读取数据库的数据,下面我们来进一步配置

CAS服务器怎么读取数据库的信息进行身份验证。

 

二、CAS结合数据库认证                                                                                                           

     1、找到并打开deployerConfigContext.xml

     2、将下面的简单的验证配置注释掉

<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />

     3、添加如下配置

   

<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"> 
	<property name="dataSource" ref="dataSource"></property> 
	<property name="sql" value="select password from user where username=?"></property> 
</bean>

   

  <!-- 数据源配置, 使用 BoneCP 数据库连接池 -->
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> 
	    <!-- 数据源驱动类可不写,Druid默认会自动根据URL识别DriverClass -->
	    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
	    
		<!-- 基本属性 url、user、password -->
		<property name="url" value="jdbc:oracle:thin:@192.168.1.37:1521:orcl" />
		<property name="username" value="orcl" />
		<property name="password" value="orcl" />
		
		<!-- 配置初始化大小、最小、最大 -->
		<property name="initialSize" value="3" />
		<property name="minIdle" value="3" /> 
		<property name="maxActive" value="6" />
		
		<!-- 配置获取连接等待超时的时间 -->
		<property name="maxWait" value="60000" />
		
		<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
		<property name="timeBetweenEvictionRunsMillis" value="60000" />
		
		<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
		<property name="minEvictableIdleTimeMillis" value="300000" />
		
		<property name="validationQuery" value="SELECT 'x'" />
		<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" />
		
		<!-- 配置监控统计拦截的filters -->
	    <property name="filters" value="stat" /> 
	</bean>

      4、将cas-server-3.5.1\modules\cas-server-support-jdbc-3.5.1.jar及BoneCP所需要的jar添加到工程中

 

使用数据库中存在的用户登录,登录web工程cas-test:

 

然后在访问web工程cas-test2,发现无需再跳转到登录页面,而是直接是工程的默认的访问页面



 

 

三、数据库数据源认证逻辑                                                                                                        

    关键代码

    AbstractUsernamePasswordAuthenticationHandler.java

   

 /**
     * PasswordEncoder to be used by subclasses to encode passwords for
     * comparing against a resource.
     */
    @NotNull
    private PasswordEncoder passwordEncoder = new PlainTextPasswordEncoder();

    @NotNull
    private PrincipalNameTransformer principalNameTransformer = new NoOpPrincipalNameTransformer();

    /**
     * Method automatically handles conversion to UsernamePasswordCredentials
     * and delegates to abstract authenticateUsernamePasswordInternal so
     * subclasses do not need to cast.
     */
    protected final boolean doAuthentication(final Credentials credentials)
        throws AuthenticationException {
        return authenticateUsernamePasswordInternal((UsernamePasswordCredentials) credentials);
    }

 

   PlainTextPasswordEncoder.java

  

/**
 * Default password encoder for the case where no password encoder is needed.
 * Encoding results in the same password that was passed in.
 * 
 * @author Scott Battaglia
 * @version $Revision$ $Date$
 * @since 3.0
 */
public final class PlainTextPasswordEncoder implements PasswordEncoder {

    public String encode(final String password) {
        return password;
    }
}

 

 QueryDatabaseAuthenticationHandler.java

  

    protected final boolean authenticateUsernamePasswordInternal(final UsernamePasswordCredentials credentials) throws AuthenticationException {
        final String username = getPrincipalNameTransformer().transform(credentials.getUsername());
        final String password = credentials.getPassword();
        final String encryptedPassword = this.getPasswordEncoder().encode(
            password);
        
        try {
            final String dbPassword = getJdbcTemplate().queryForObject(this.sql, String.class, username);
            return dbPassword.equals(encryptedPassword);
        } catch (final IncorrectResultSizeDataAccessException e) {
            // this means the username was not found.
            return false;
        }
    }

 

 说明:

    QueryDatabaseAuthenticationHandler:cas-server-support-jdbc提供的查询接口其中一个,QueryDatabaseAuthenticationHandler是通过配置一个 SQL 语句查出密码,与所给密码匹配。
如果需要使用密码加密,可以创建一个类实现 org.jasig.cas.authentication.handler.PasswordEncoder,然后在encode中加密用户输入的密码返回即可。如果需要在代码中获取用户名密码进行验证,可以创建一个类继承 org.jasig.cas.authentication.handler.support.AbstractUsernamePasswordAuthenticationHandler,重写authenticateUsernamePasswordInternal方法。

  • 大小: 27.8 KB
  • 大小: 14 KB
  • 大小: 9.4 KB
  • 大小: 8.5 KB
分享到:
评论

相关推荐

    单点登录sso-shiro-cas-maven

    spring下使用shiro+cas配置单点登录,多个系统之间的访问,每次只需要登录一次 ## 系统模块说明 1. cas: 单点登录模块,这里直接拿的是cas的项目改了点样式而已 2. doc: 文档目录,里面有数据库生成语句,采用的...

    单点登入--CAS3.0

    总之,CAS3.0提供了一种实用的单点登录解决方案,它简化了用户认证流程,提高了用户体验,同时也为系统管理员提供了集中的安全管理。通过源码分析和配置实践,我们可以更深入地掌握SSO的核心技术,为构建安全、高效...

    CAS多数据库配置单点登录

    CAS多数据库配置单点登录 CAS(Central Authentication Service)是一种流行的单点登录解决方案,能够提供安全、可靠的身份验证服务。下面将详细介绍CAS多数据库配置单点登录的知识点。 一、环境说明 在配置CAS单...

    单点登录 - CAS【一】

    单点登录(Single Sign-On,简称SSO)是一种网络身份验证机制,允许用户在一个系统或应用中登录后,无需再次认证即可访问其他相互信任的系统。CAS(Central Authentication Service)是 Yale 大学开发的一个开源项目...

    集成cas实现单点登录认证.zip

    本压缩包"集成cas实现单点登录认证.zip"显然包含了关于如何使用CAS(Central Authentication Service)框架集成SSO认证的资源。下面我们将详细探讨相关的知识点。 1. CAS简介:CAS是耶鲁大学开源的一个Web应用的...

    CAS5.3+windows AD域实现单点登录免身份认证.docx

    CAS 5.3 及 Windows AD 域实现单点登录免身份认证 CAS(Central Authentication Service)是一种流行的开源身份验证系统,旨在提供单点登录(SSO)解决方案。Windows AD(Active Directory)则是微软公司推出的目录...

    CAS单点登录(SSO)服务端自定义认证+CAS客户端配置+CAS完整使用文档+CAS4.2.7 cas-serv服务端源码 cas-client客户端源码

    CAS(Central Authentication Service)是Java开发的一个开源的单点登录...通过学习和实践,你可以掌握CAS的核心概念,实现自定义认证策略,以及优化客户端集成,从而为你的项目构建一个强大而安全的单点登录系统。

    单点登录解决方案-CAS

    单点登录(Single Sign-On,简称SSO)是一种网络身份验证机制,允许用户在一个系统上登录后,无需再次认证即可访问多个相互独立的应用系统。CAS(Central Authentication Service)是单点登录的一种开源实现,由耶鲁...

    CAS单点登录demo

    CAS(Central Authentication Service)单点登录系统是一种网络身份验证协议,它允许用户通过单一的身份验证过程访问多个应用系统。在本“CAS单点登录demo”中,我们将深入探讨CAS的工作原理、配置步骤以及如何实现...

    CAS单点登录的经典配置,以及多数据库的处理方案

    CAS单点登录的经典配置,以及多数据库的处理方案 CAS单点登录是Single Sign-On(SSO)的一种实现,允许用户一次性进行认证之后,就访问系统中不同的应用;而不需要访问每个应用时,都重新输入密码。CAS单点登录产品...

    cas-server4.2.7数据库配置相关文件以及说明

    CAS(Central Authentication Service)是Java开发的一个开源的单点登录(Single Sign-On,SSO)系统,主要用于统一认证管理。CAS服务器4.2.7版本的数据库配置涉及到多个环节,包括数据库连接、用户数据存储与读取等...

    cas-3.4.1_单点登录_CAS_

    CAS(Central Authentication Service)是Java开发的一个开源的单点登录(Single Sign-On,简称SSO)框架,主要用于解决网络应用中的身份验证问题。在“cas-3.4.1_单点登录_CAS_”这个项目中,你将获得一个完整的CAS...

    cas服务器war包(通过数据库认证)

    CAS(Central Authentication Service)是一种广泛使用的开放源代码的单点登录(Single Sign-On,简称SSO)协议。SSO允许用户在一次登录后,就可以访问多个应用系统,而无需再次进行身份验证。在这个"cas服务器war包...

    cas-2.5.3 + mysql单点登录

    CAS(Central Authentication Service)是Java开发的一个开源的单点登录(Single Sign-On,简称SSO)框架,主要用于解决网络应用中的身份验证问题。在“cas-2.5.3 + mysql单点登录”这个项目中,我们将使用CAS 2.5.3...

    cas实现单点登录服务端及客户端

    CAS(Central Authentication Service)是一种广泛使用的开放源代码的单点登录(Single Sign-On,SSO)框架,由耶鲁大学开发并维护。SSO允许用户通过一次登录验证就能访问多个应用系统,无需在每个系统之间单独进行...

    Laravel开发-cas-server

    Laravel 开发中的 CAS (Central Authentication Service) 服务器是实现单点登录(Single Sign-On, SSO)的一种常见方法。CAS 是一个开放源码的认证协议,旨在简化Web应用的认证流程,允许用户在一次登录后访问多个...

    CAS单点登录配置

    在提供的PDF文件`cas单点登录(一).pdf`和`cas单点登录(二).pdf`中,应该详细涵盖了这些步骤,以及更深入的技术细节,包括可能出现的问题和解决方案。通过学习这些文档,你应该能够成功地配置和实施CAS单点登录...

    cas单点登录

    CAS(Central Authentication Service)是 Yale 大学开源的一个单点登录协议,它提供了一种集中式的认证方式,简化了多应用系统的身份验证流程。 **单点登录原理** 单点登录的核心在于一个中心认证服务器(CAS ...

Global site tag (gtag.js) - Google Analytics