SSO单点登录系列3:cas-server端配置认证方式实践

详见:http://blog.csdn.net/ae6623/article/details/8851801

文中所有资料下载地址:在文章中最下方。

 

本篇将讲解cas-server端的认证方式

 

1.最简单的认证,用户名和密码一致就登录成功

2.配置oracle的jdbc数据源,通过spring动态查询数据库

3.配置oracle和mysql的数据源,通过spring动态查询数据库,一个满足就立即登录成功

4.配置oracle和mysql的数据源,以及添加一个java类,三者认证,有一个满足就立即登录成功。

5.穿插自定义的MD5加密类对用户的密码进行加密和数据库里已经MD5加密的密码做对比。

 

好的,开始吧。

 

测试一:

 

ps:记得添加上所需的jar包,否则控制台会提示找不到数据库驱动这种低级错误。

 

jar包:

--------------------------------------------

cas-server-support-jdbc-3.3.3.jar

ojdbc14.jar

mysql-connector-java-5.1.16-bin.jar

--------------------------------------------

 

(1)最简单的认证,用户名和密码一致就登录成功

 

步骤:打开你的C:\tomcat7\webapps\casServer\WEB-INF\deployerConfigContext.xml文件

 

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

这一句话就是默认的认证模式,直接用户名和密码一致就可以登录系统了,显然太白痴了一点。下面我们开始玩测试二

 

测试二:

(2)配置oracle的jdbc数据源,通过spring动态查询数据库

 

步骤:

1.打开你的C:\tomcat7\webapps\casServer\WEB-INF\deployerConfigContext.xml文件

2.注释掉那句很白痴的用户名和密码一致就让你认证通过的那行xml代码

3.添加oracle认证模式,添加自定义的MD5类,添加默认的cas的MD5验证类,添加oracle的数据源

<span style="font-family:Microsoft YaHei;font-size:14px;"><property name="authenticationHandlers">
  <list>
    <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" p:requireSecure="false" />
    <!-- 不https验证: p:requireSecure="false" -->
    <!-- 默认认证模式:用户名和密码一致就认证通过
             <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
     -->
    <!--配置验证类1-->
    <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
      <property name="dataSource" ref="dataSource"></property>
      <property name="sql" value="select pw from sys_acct_auth where user_code =?"></property>
      <!--下面这个是我自定义的MD5加密类-->
      <property name="passwordEncoder" ref="RS10Md5PasswordEncoder"></property>
      <!--下面这个是cas提供的MD5加密类,下面会有bean,你自己一睁眼就看到了,玩过spring的应该看一眼就吐了
               <property name="passwordEncoder" ref="MD5PasswordEncoder" ></property>
         -->
    </bean>
  </list>
</property>
<!-- 增加数据源1-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
  <property name="url" value="jdbc:oracle:thin:@192.168.168.144:1521:hpora" />
  <property name="username" value="muapp10g" />
  <property name="password" value="ceshiku" />
</bean>

<!--数据验证模式1 cas默认MD5加密类,返回值:加密后的字符串-->
<bean id="MD5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
  <constructor-arg index="0" value="MD5" />
</bean>

<!--数据验证模式2 我自定义的MD5加密类,返回值:加密后的字符串-->
<bean id="RS10Md5PasswordEncoder" class="org.jasig.cas.authentication.handler.Crypt"></bean></span>

 

 

测试三:

(3)配置oracle和mysql的数据源,通过spring动态查询数据库,一个满足就立即登录成功

(4)配置oracle和mysql的数据源,以及添加一个java类,三者认证,有一个满足就立即登录成功。

(5)穿插自定义的MD5加密类对用户的密码进行加密和数据库里已经MD5加密的密码做对比。

 

有人说我的web1应用和web2应用拥有各自的用户群,各自的注册数据库,怎么办?对啊怎么办?

 

那么我们就在验证类的List标签里面多添加几个验证类,只要有一个验证方式通过了,我们就让用户登录成功,如何?

 

开始干吧,继续改造上面的那个xml文件。

 

最终的xml文件如下所示:

 

<span style="font-family:Microsoft YaHei;font-size:14px;"><property name="authenticationHandlers">
  <list>
    <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" p:requireSecure="false" />
    <!-- 不https验证: p:requireSecure="false" -->
    <!-- 默认认证模式:用户名和密码一致就认证通过
             <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
     -->

    <!--配置验证类1-->
    <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
      <property name="dataSource" ref="dataSource"></property>
      <property name="sql" value="select pw from sys_acct_auth where user_code =?"></property>
      <!--下面这个是我自定义的MD5加密类-->
      <property name="passwordEncoder" ref="RS10Md5PasswordEncoder"></property>
      <!--下面这个是cas提供的MD5加密类,下面会有bean,你自己一睁眼就看到了,玩过spring的应该看一眼就吐了
               <property name="passwordEncoder" ref="MD5PasswordEncoder" ></property>
         -->
    </bean>

    <!--配置验证类2-->
    <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
      <property name="dataSource" ref="dataSourceForMySql"></property>
      <property name="sql" value="select pw from userInfo where username =?"></property>
    </bean>

    <!--配置验证类3-->
    <bean class="org.jasig.cas.authentication.handler.RsCasDaoAuthenticationHandler" />
  </list>
</property>

<!-- 增加数据源1-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
  <property name="url" value="jdbc:oracle:thin:@192.168.168.144:1521:hpora" />
  <property name="username" value="muapp10g" />
  <property name="password" value="ceshiku" />
</bean>

<!-- 增加数据源2-->
<bean id="dataSourceForMySql" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName">
    <value>com.mysql.jdbc.Driver</value>
  </property>
  <property name="url">
    <value>jdbc:mysql://localhost:3306/userdb</value>
  </property>
  <property name="username">
    <value>root</value>
  </property>
  <property name="password">
    <value>123</value>
  </property>
</bean>

<!--数据验证模式1 cas默认MD5加密类,返回值:加密后的字符串-->
<bean id="MD5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
  <constructor-arg index="0" value="MD5" />
</bean>

<!--数据验证模式2 我自定义的MD5加密类,返回值:加密后的字符串-->
<bean id="RS10Md5PasswordEncoder" class="org.jasig.cas.authentication.handler.Crypt"></bean></span>

 

截图如下:

 

 

 

ok 以上xml文件就可以满足你的一些简单的BT需求了。如果看到这里还有什么疑惑的话,我估计就是那些自定义的java类怎么写了。来来来,我教你。

 

 

下面的步骤详见:http://blog.csdn.net/ae6623/article/details/8851801

时间: 2024-09-14 19:59:27

SSO单点登录系列3:cas-server端配置认证方式实践的相关文章

SSO单点登录系列2:cas客户端和cas服务端交互原理动画图解,cas协议终极分析

这次的收获是把PPT也深入研究了一番... 上图:一会上原理分析:(本篇不涵盖cas代理认证模式,代理目前还没用到.) 文中所有资料下载地址:在文章中最下方. 1)PPT流程图: 一.用户第一次访问web1应用. ps:上图少画了一条线,那一条线,应该再返回来一条,然后再到server端,画少了一步...谢谢提醒.而且,重定向肯定是从浏览器过去的.我写的不严谨,画的比较通俗了...因该像下面这张图一样就ok了!!PPT自己下载下来修改吧,我就不改了. 二.用户第一次访问web2应用. 困扰了好久

SSO单点登录系列5:cas单点登录增加验证码功能完整步骤

详见 http://blog.csdn.net/ae6623/article/details/8919718 环境: server端:cas-server-core-3.5.2.jar.cas-client-core-3.2.1.jar client端:cas-client-core-3.1.3.jar.http屏蔽了https后的casclient.jar(http://blog.csdn.net/dengtaowei/article/details/7039399)   之前做的界面里面缺少

SSO单点登录系列6:cas单点登录防止登出退出后刷新后退ticket失效报500错

http://blog.csdn.net/ae6623/article/details/9494601

SSO单点登录系列4:cas-server登录页面自定义修改过程

详见网址:http://blog.csdn.net/ae6623/article/details/8861065 目标:   下面是正文:   打开cas的默认首页,映入眼帘的是满眼的中文and英文混杂体,作为一名合格的用户,我表示很不开心.   于是,打开Nodepad++,寻找C:\tomcat7\webapps\casServer\WEB-INF\view\jsp\default\ui\casLoginView.jsp这个页面,开始了我的改造之旅,作为一名合格的分享ser,我表示全程都会转

CAS实现SSO单点登录原理

一.不落俗套的开始 1.背景介绍 单点登录:Single Sign On,简称SSO,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. CAS框架:CAS(Central Authentication Service)是实现SSO单点登录的框架. 2.盗一张学习CAS绝大多都看过的图以及执行部分分析 注:已分不清原创,此处就不给出地址了. 从结构上看,CAS包含两个部分:CAS Server 和CAS Client需要独立部署,主要负责对用户的认证工作:CAS C

Web 单点登录系统 JA-SIG CAS

JA-SIG CAS(Central Authentication Service)为Web应用系统提供了单点登录服务.它的特性包括:一个开放和具有很好文档支持的协议:一个Java开源服务器组件:提供多种类型的客 户端包括Java..Net.PHP.Perl.Apache.uPortal等:能够与uPortal.BlueSocket.TikiWiki. Mule. Liferay.Moodle集成使用. -------------------------------------- 背景知识: 什

JAVA CAS单点登录之三:CAS代理模式演练

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dba10g.blog.51cto.com/764602/1753244 前言  JAVA CAS单点登录之一:搭建CAS服务器     JAVA CAS单点登录之二:CAS普通模式1演练     代理模式相相对上一节的普通模式,更加复杂了.但配置起来也会稍微有些差别.所谓难者不会,会者不难.如果遇到一个从来没有遇到的问题,解决起来也是非常棘手的,当然解决之后就不是事了.我就遇到

cas-CAS SSO 单点登录时报错

问题描述 CAS SSO 单点登录时报错 java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:407) org.jasig.cas.client.validation.AbstractCa

SSO单点登录,AD域,CS

问题描述 各位大神好:请大家介绍一款开源的SSO单点登录系统,要求支持AD域控,支持C/S.,B/S网上看到的casopensso没找到支持AD,c/s的资料. 解决方案 解决方案二:楼主请参考解决方案三:只用过cas--唉,眼界太窄