JAVA CAS单点登录之四:CAS服务器增加JDBC访问能力

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://dba10g.blog.51cto.com/764602/1753680

经过前面说明,已经完成了CAS服务器的搭建,代理客户端的搭建以及普通客户端,back-end-service客户端的搭建。如果不明白的,参照如下链接。

JAVA CAS单点登录之一:搭建CAS服务器 

JAVA CAS单点登录之二:CAS普通模式1演练

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

现在的CAS服务器认证功能弱到爆了,使用模式自带的认证Handler,用在模拟测试玩玩上课,用在系统中,压根还不行。这一节,咱们就增加这一方面的功能。

主要内容

1.用户名和密码从数据库中读取(用户量有保障)

2.密码保障

前言

    咱们知道CAS默认提供的认证服务,只需要输入的用户名和密码相同,即可通过认证。咱们先要找到这一块的配置信息。

在deployerConfigContext.xml中找到代码片段如下


1

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


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

public final class SimpleTestUsernamePasswordAuthenticationHandler extends

    AbstractUsernamePasswordAuthenticationHandler {

 

    public SimpleTestUsernamePasswordAuthenticationHandler() {

        log

            .warn(this.getClass().getName()

                " is only to be used in a testing environment.  NEVER enable this in a production environment.");

    }

 

    public boolean authenticateUsernamePasswordInternal(final UsernamePasswordCredentials credentials) {

        final String username = credentials.getUsername();

        final String password = credentials.getPassword();

 

        if (StringUtils.hasText(username) && StringUtils.hasText(password)

            && username.equals(getPasswordEncoder().encode(password))) {

            log

                .debug("User [" + username

                    "] was successfully authenticated.");

            return true;

        }

 

        log.debug("User [" + username + "] failed authentication");

 

        return false;

    }

}

通过分析代码,应该很容易看明白。如果大家对面向接口编程有一定了解的话,就应该知道咱们下一步是做什么了。重点分析SimpleTestUsernamePasswordAuthenticationHandler 的结构树。

这时候应该留意到了QueryDatabaseAuthenticationHandler这个类,没错。接下来的这一章的过程实质上就是一步步将SimpleTestUsernamePasswordAuthenticationHandler替换为QueryDatabaseAuthenticationHandler的过程。

  1. 添加依赖(cas jdbc支持包,及数据库驱动)

    修改pom.xml,增加2个依赖。

  org.jasig.cas
  cas-server-support-jdbc
  3.5.3

  mysql
  mysql-connector-java
  5.1.38

如果要使用commons-dbcp的话,请自行添加以下依赖

  • commons-collections-3.2.jar
  • commons-dbcp-1.2.1.jar
  • commons-pool-1.3.jar

2.修改deployerConfigContext.xml文件

准备数据库环境


1

2

3

4

5

6

7

8

9

10

DROP TABLE IF EXISTS `t_users`;

CREATE TABLE `t_users` (

  `user_name` varchar(32) DEFAULT NULL,

  `passwordvarchar(64) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

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

-- Records of t_users

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

INSERT INTO `t_users` VALUES ('jdbc_user''jdbc_password');

密码暂时是明文

2.1 注释掉SimpleTestUsernamePasswordAuthenticationHandler


1

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

2.2增加QueryDatabaseAuthenticationHandler相关配置


1

2

3

4

5

6

7

8

9

10

11

12

<bean id="authenticationManager"

      class="org.jasig.cas.authentication.AuthenticationManagerImpl">

      ...

     <property name="authenticationHandlers"

     <list>

<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">

    <property name="dataSource" ref="dataSource" />

    <property name="sql" value="select password from t_users where lower(user_name) = lower(?)" />

</bean>

</list>

</property>

</bean>

其中,没有考虑加密处理,别急,一步步来。

到这一步就把JDBC集成到CAS服务了了。

2.3.验证,输入jdbc_user/jdbc_password,认证通过。

2.4增加密码认证功能,上面的结构树大家如果注意到了passwordEncoder属性,接下来就应该知道怎么了。没错为QueryDatabaseAuthenticationHandler的passwordEncoder属性赋值

2.5 完整配置


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

...

<bean id="authenticationManager"

      class="org.jasig.cas.authentication.AuthenticationManagerImpl">

 

 

    <property name="credentialsToPrincipalResolvers">

        <list>

 

            <bean class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver">

                <property name="attributeRepository" ref="attributeRepository"/>

            </bean>

  

            <bean

                    class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver"/>

        </list>

    </property>

 

 

    <property name="authenticationHandlers">

        <list>

   

            <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"

                  p:httpClient-ref="httpClient" p:requireSecure="false"/>

 

            <!--

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

            -->

            <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">

                <property name="dataSource" ref="dataSource" />

                <property name="sql" value="select password from t_users where lower(user_name) = lower(?)" />

                <property name="passwordEncoder" ref="passwordEncoder"/>

            </bean>

        </list>

    </property>

</bean>

<bean id="passwordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" p:characterEncoding="UTF-8" >

    <constructor-arg index="0" value="MD5" />

</bean>

<!-- Data source definition -->

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

    <property name="driverClassName">

        <value>com.mysql.jdbc.Driver</value>

    </property>

    <property name="url">

        <value>jdbc:mysql://localhost:3306/exampledb</value>

    </property>

    <property name="username">

        <value>root</value>

    </property>

    <property name="password">

        <value>root</value>

    </property>

</bean>

...

2.6 认证

这时候需要手动改一下数据库记录的密码了

apple 对应的MD5字符串是1f3870be274f6c49b3e31a0c6728957f。

也可以执行如下语句


1

INSERT INTO `t_users` VALUES ('jdbc_user''1f3870be274f6c49b3e31a0c6728957f');

2.7 重启服务器,输入jdbc_user/apple ,认证通过。

最后,其他数据库的话,可以如下配置


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

<!-- Oracle connector -->

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

 <property name="driverClassName">

  <value>oracle.jdbc.driver.OracleDriver</value>

 </property>

 <property name="url">

  <value>jdbc:oracle:thin:@database-server-name:1521:SID</value>

 </property>

 <property name="username">

  <value>admusr</value>

 </property>

 <property name="password">

  <value>admpwd</value>

 </property>

</bean>

  

<!-- MySQL connector -->

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

 <property name="driverClassName">

  <value>com.mysql.jdbc.Driver</value>

 </property>

 <property name="url">

  <value>jdbc:mysql://database-server-name:3306/db-name</value>

 </property>

 <property name="username">

  <value>admusr</value>

 </property>

 <property name="password">

  <value>admpwd</value>

 </property>

</bean>

  

  

<!-- PostgreSQL connector -->

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

 <property name="driverClassName">

  <value>org.postgresql.Driver</value>

 </property>

 <property name="url">

  <value>jdbc:postgresql://database-server-name:5432/db-name</value>

 </property>

 <property name="username">

  <value>admusr</value>

 </property>

 <property name="password">

  <value>admpwd</value>

 </property>

</bean>

参考链接

https://wiki.jasig.org/display/CASUM/Using+JDBC+for+Authentication

https://wiki.jasig.org/display/CASUM/JDBC

https://wiki.jasig.org/display/CAS/Examples+to+Configure+CAS

 

一步步走下来,一点也不难。祝好运。

本文出自 “简单” 博客,请务必保留此出处http://dba10g.blog.51cto.com/764602/1753680

时间: 2024-10-28 22:08:04

JAVA CAS单点登录之四:CAS服务器增加JDBC访问能力的相关文章

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

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

CAS单点登录时AJAX页面刷新无反应(302 Moved Temporarily)

最近使用CAS做单点认证服务时发现过大概二十分钟后就发现凡是异步方式刷新页面就无反应了(由于使用EasyUI框架,所以页面刷新基于ajax+div方式),刚开始一直认为是CAS服务端超时的问题,查看了各个配置,网上也参考了许多帖子,一直没有解决,今天无意想起来是不是session过期了呢,因为单点登录客户端没有配置任何session有效时长,也就是说客户端的session时长为tomcat默认时长(网上有人说Tomcat默认session有效期为30分钟,而现在发现的是大概20分钟后就会出现用a

JAVA CAS单点登录之二:CAS普通模式1演练

前言 经过上一JAVA CAS单点登录之一:搭建CAS服务器 这一章,CAS服务器已经搭建好了.当然这时候的CAS服务器仅仅是最初版本的.比如密码验证,页面美观度都需要进一步调整.但这都是无关紧要的. 最主要的是先把整个一套认证流程走下来,至于完善的工作,都是没个点的工作了,相对比较简单. 主要内容    1. 新建一个web应用mywebapp1,测试与CAS服务器的认证效果     2.如果上一步骤1认证成功的话,将mywebapp1复制一份,调整若干参数,继续测试.     如果步骤1,步

单点登录系统CAS筹建及取得更多用户信息的实现

国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为"中国PE第一股",市值超1000亿元.    ----------------------------------------------------------------------------

CAS单点登录(SSO)完整教程

CAS单点登录(SSO)完整教程(2012-02-01更新) 一.教程说明 前言 教程目的:从头到尾细细道来单点登录服务器及客户端应用的每个步骤 单点登录(SSO):请看百科解释猛击这里打开 本教程使用的SSO服务器是Yelu大学研发的CAS(Central Authentication Server), 官网:http://www.jasig.org/cas 本教程环境: Tomcat6.0.29 JDK6 CAS Server版本:cas-server-3.4.3.1.cas-server-

java-【急】求大神帮帮忙,CAS单点登录问题,登录成功后controller收不到请求(要哭了)

问题描述 [急]求大神帮帮忙,CAS单点登录问题,登录成功后controller收不到请求(要哭了) 首先说下问题,我们的项目之前SSO单点登录一直用的http的方式, 这一块登录一直都是正常的,现在要切上正式环境了,SSO服务器那边就改用了https的方式SSO配置如下: <listener> <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-cla

SpringSecurity+JPA+CAS单点登录

问题描述 SpringSecurity+JPA+CAS单点登录错误信息如下:ERRORContextLoader:220-Contextinitializationfailedorg.springframework.beans.factory.BeanDefinitionStoreException:UnexpectedexceptionparsingXMLdocumentfromServletContextresource[/WEB-INF/classes/applicationContext

单点登录之CAS SSO从入门到精通(第一天)

啊......it's quite a long time. 好久没更新博客了,有一年之久了,一直在忙于公司的一些项目.2014年到2015年工作太忙,我也接触到了新的领域,认识了新的同事. 对于一些经常跟我博客的读者们深深说一声抱歉. 同时,也在新的一年将到之际,祝各位新春愉快,羊年洋洋洋. 好了,废话少说,开始我们架构师之路的新的历程,SSO-单点登录. 另外想以此SSO系列教程献给我那身体不太好的同事-小白同志,祝小白同志身体一直健康                            

【SSO-CAS】SSO之CAS单点登录实例演示

国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为"中国PE第一股",市值超1000亿元.    ----------------------------------------------------------------------------