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类怎么写了。来来来,我教你。