`

单点登录 - 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: 文档目录,里面有数据库生成语句,采用的...

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

    里面包含了cas-server cas-calient server.xml 密钥库文件 实现了cas服务端通过数据库认证。不懂的朋友可以参考我的博客《用CAS实现SSO(单点登录)+数据库读取》

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

    包含cas源码、cas使用说明文档(包含配置信息)、连接数据库所需jar包、cas服务端自定义返回值等

    菜鸟配置CAS单点登录

    手把手教你如何配置如下几项: 单点登录认证配置 配置为自定义数据库认证方式 获取登录用户名 单点退出 网站间建立信任关系 修改默认页面 超时设置 另附CAS实用网址

    单点登录技术文档 多用户多系统多数据库

    CAS 单点登录 多数据库 SSO 1、 单点登录概述 单点登录的英文名称为Single Sign-On,简写为SSO,它是一个用户认证的过程,允许用户一次性进行认证之后,就访问系统中不同的应用;而不需要访问每个应用时,都重新...

    cas单点登录自己写的测试例子

    cas单点登录的例子,用maven方式管理,里面包手client端及server端,默认是用户名密码同名认证,可用第二种用数据库认证(已注释,打开就可以使用,需建对应的数据库)

    cas单点登录系统

    cas单点登录系统,带源码,可定制开发;CASServer负责完成对用户的认证工作,CASServer需要独立部署,CASServer处理用户名/密码等凭证(Credentials)验证,它可能会到数据库检索一条用户帐号信息,也可能在XML文件中...

    cas与springboot集成

    本资源是cas与springboot集成,有客户端和服务器demo,只需要修改cas-server的数据库连接,即可。 CAS单点登录-自定义认证之重写Credential,可以处理更复杂的业务。

    cas单点登录的专业秘籍

    这个是cas的所有流程: 1.cas的搭建与配置 ...3.cas的认证方式:数据库认证+自定义认证方式(想怎么验证都可以) 4.自定义登录页面。 这可是精华,花费了我一个多星期时间整理出来的技术文档(简单明了)

    SSO CAS 单点登录实例SSOAuth+SSOWebDemo1+SSOWebDemo2.zip

    单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 较大的企业内部,一般都有很多的...

    MaxKey单点登录认证系统-其他

    寓意是最大钥匙,是业界领先的企业级IAM身份管理和身份认证产品,支持OAuth 2.0/OpenID Connect、SAML 2.0、JWT、CAS等标准化的开放协议,提供简单、标准、安全和开放的用户身份管理(IDM)、身份认证(AM)、单点登录...

    cas server 5.3.9 整合数据库验证用户信息,使用security密码验证方式

    提供了cas server 5.3.9 单点登录的资源整合,cas服务器,运行即可用 配置了spring srcurity 密码验证方式

    cas-server-webapp-4.0.0:sso 单点登陆; 使用http,去掉证书认证; 配置mysql 数据元;

    2015-05-27cas 使用http,去掉证书认证;cas 配置mysql 的数据源;create table user_ (screenName varchar(30), password_ varchar(45) , primary key (screenName))insert into user_ (screenName,password_) ...

    pro:企业管理应用系统

    二、集成cas单点登录的企业系统管理 三、采用jasig耶鲁大学的cas server cas 单点登录项目 四、基于springsecurity oauth2认证方式的实现,token数据库存储,提供app后台服务端项目 五、网络应用框架Ap

    Django实现CAS+OAuth2的方法示例

    xxx 选择登录,跳转到LMS的认证界面,CAS读取数据库进行认证,redirect到xxx的界面并且附带ticket在url中,在浏览器中存入Cookie。 xxx得到ticket后向CAS发送ticket验证有效性。 xxx允许用户访问内部资源。 ...

    spring security 参考手册中文版

    32.3.3使用CAS认证无状态服务 249 配置CAS以获取代理授予票证 249 使用代理票证调用无状态服务 250 32.3.4代理票证认证 251 33. X.509认证 253 33.1概述 253 33.2将X.509身份验证添加到您的Web应用程序 253 33.3在...

    简洁好用的数据库表结构文档工具,基于 SpringBoot3 开源IDaas/IAM平台

    简洁好用的数据库表结构文档工具,基于 SpringBoot3 开源IDaas/IAM平台,支持OAuth2.x、OIDC、SAML2.0、JWT、CAS等SSO标准协议,实现用户全生命周期的管理、统一认证和单点登录。

    JavaEE求职简历-姓名-JAVA开发工程师.doc

    熟悉JavaSE/JavaEE,具有面向对象的思维认知;...了解CAS进行SSO单点登录; 了解Solr全文检索; 了解使用ActiveMQ发送及接受消息; 了解使用Tomcat、Nginx实现动静分离; 了解Web service及CXF框架;

    用户登录、权限、集成模块的设计与实现

    目 录 一、概述 3 1.1模块描述 3 1.2开发工具 3 二、需求 3 2.1用户登录模块功能需求...3.5集成cas实现单点登录认证 8 3.6集成atomikos实现分布式事务 9 四、 测试 10 五、 总结 11 5.1程序设计总结 11 5.2个人总结 11

    JavaEE求职简历-姓名-JAVA开发工程师.docx

    线上健康咨询服务、安心学堂服务、单点登录服务、医疗设备商场服务、健康指导服务、在线支付服务。 核心技术: 1.微服务的整体架构:SpringBoot + SpringCloud + Maven; 2.用户登录模块采用CAS框架实现; 3.使用Git...

Global site tag (gtag.js) - Google Analytics