• SSO单点登录系列3:casserver端配置认证方式实践


    详见: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

  • 相关阅读:
    Codeforces Round #646 (Div. 2) B. Subsequence Hate(前缀和/思维)
    Codeforces Round #646 (Div. 2) A. Odd Selection(思维/分类讨论)
    “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛 A.点对最大值(树的直径/树形DP)
    “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛)(ABCEFHJ)
    Codeforces Round #645 (Div. 2) C. Celex Update(思维)
    Codeforces Round #645 (Div. 2) D. The Best Vacation(二分+前缀和)
    Codeforces Round #645 (Div. 2) B. Maria Breaks the Self-isolation(贪心)
    Codeforces Round #645 (Div. 2) A. Park Lighting
    ORM之SQLALchemy
    python--10--mysql(2)
  • 原文地址:https://www.cnblogs.com/ae6623/p/4416535.html
Copyright © 2020-2023  润新知