cas sso 单点登录

环境:

1,CAS 4.0

2,eclipse

3,tomcat7.0.59

4,jdk1.7.0_17

一,简介

    单点登录( Single Sign-On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要 登录一次 就可以访问所有相互信任的应用系统。

二,配置服务器和客户端

我们要站在巨人的肩膀上直接参照ITeye的一篇博文害羞

http://liangjian103.iteye.com/blog/1129056

就是配置一个tomcat,放cas.war,然后修改些配置,启动就OK

(注意如果这里你要是本地起两个tomcat别忘了改端口,负责会冲突)。

但是生成证书不好用,证书下面再讲。注意这里配置tomcat

<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"  
           port="8443" minSpareThreads="5" maxSpareThreads="75"  
           enableLookups="true" disableUploadTimeout="true"  
           acceptCount="100"  maxThreads="200"  
           scheme="https" secure="true" SSLEnabled="true"  
           clientAuth="false" sslProtocol="TLS" 
           keystoreFile="keystore/server.keystore" keystorePass="changeit"  
           />的时候,其中keystoreFile的路径改成下面第三部生成证书的路径,

我这里是keystoreFile="D:/keys/smallkey"

还有就是你的客户端(也就是你的一个服务应用)加入了filter之后会

缺少一个jar包,cas-client-2.0.11.zip里面java\lib\casclient.jar这个

包导入你的项目。

三,生成证书并导入客户端

还是不要重复造轮子大笑参考CADN的一篇博文(看第一第二就ok啦)
http://blog.csdn.net/small_love/article/details/6664831

注意这里生成证书的时候,姓氏与名字,公司啥的都填写sso.tomcat.com。

区域啥的随便填。

导入证书到客户端(也就是你的一个服务应用)到jdk的时候,

这个jdk要是你服务用的jdk,并且文章中路径有问题
C:\>keytool -import -keystore C:\Java\jdk1.6.0_21\lib\security\cacerts -file D:/keys/small.crt -alias smalllove

其中jdk的路径是D:\javaSoft\jdk1.7.0_17\jre\lib\security\cacerts

文章中路径少了一个jre,如果报错说cacerts有问题的话,直接删了就行,

然后再执行命令,自带的这个cacerts没有用。


好了,最后启动cas服务,再启动你的项目,访问以下你的项目,直接跳转到cas登录了吧,哈哈,祝你顺利。


四,配置自己的服务器用户登录

参照http://itindex.net/detail/51110-cas-4.0-%E7%99%BB%E5%BD%95的博文

参考第6,7,8,9都ok,卧槽,为啥没有第一次找到这个博文,就不用前面这么折腾了。难过

五,定制自己的单点登录系统

有个问题值得思考,我有好多子系统,一个cas服务器,我注册怎么实现?问题是cas没有注册机制,那么我们怎么实现安全又便捷的单点登录?
呵呵,查找了一些资料和文章,发现cas服务器可以配置多个数据源,也就是你把客户端的数据源都配置一遍,验证的时候Server端会根据你配置

Client的数据库信息去读Client的数据库,如果其中任何一个通过了就算通过了。

以后用户注册,直接在你的客户端注册,对cas服务无任何影响。

下面就配置多数据源:

找到deployerConfigContext.xml这个文件,在bean id="authenticationManager"多加一个

<entry key-ref="dbAuthHandler2" value-ref="primaryPrincipalResolver"/>

然后在beans标签的下面加上以下两个数据源(注意,所加的这两个数据源必须是beans下面的第一个bean

1.      <bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">  

2.             <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>  

3.             <property name="url"><value>jdbc:mysql://192.168.1.244:3306/cas</value></property>  

4.             <property name="username"><value>root</value></property>  

5.             <property name="password"><value>root</value></property>  

6.          </bean>  

7.          <bean id="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">  

8.             <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>  

9.             <property name="url"><value>jdbc:mysql://192.168.1.245:3306/cas1</value></property>  

10.         <property name="username"><value>root</value></property>  

11.         <property name="password"><value>root</value></property>  

    </bean> 

然后找到QueryDatabaseAuthenticationHandler,再拷贝一个dbAuthHandler,id改成dbAuthHandler2:如下

<!--验证密码-->
  <bean id="dbAuthHandler"
      class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
      p:dataSource-ref="dataSource"
      p:passwordEncoder-ref="base64PasswordEncoder"  
      p:sql="select pwd from s_user where name=? and state='1' " />
 
 <bean id="dbAuthHandler2"
      class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
      p:dataSource-ref="dataSource2" 
      p:sql="select pwd from s_user where name=? and state='1' " />

这样就可以了(其中每个数据源都可以用自己独立的密码加密验证,修改passwordEncoder-ref的refer,自己编写具体密码加密类就可以了


六,定制自己的密码加密校验方式

每个客户端都会有自己的加密方式,很多都不是简单的md5,sha1加密,这篇博文介绍了如何自定义自己的加密方式。

http://www.myexception.cn/software-architecture-design/1659294.html

就是自己写个加密类,然后把编译好的class文件放到jar包中,配置文件改成自己写的类的路径就ok了。

七,eclpse导入cas项目

上面第六步已经发现要导入cas项目了,要不修改源码确实麻烦。

(1),首先看一下百度文库的文章,简单导入一下cas项目

http://wenku.baidu.com/link?url=8HiIVrbbhPSVQh4WwPF4ZJ8jiElNkDyLijp4JulRXJuRAkgVVIng61_pTWIuvyRoOOgLQ_6lfUx9Ug2qd9mYU07vDglye8p_-RM-AcSQNWm

(2),发现上面导入的项目太简单,还改源码呢,连个蛋都改不了。好吧,下面再导入真能用到要修改的源码。

复制cas-server-core\src\main\java下的org文件包到你第(1)步建的cas项目src下。

复制cas-server-support-jdbc\src\main\java下的org文件包到你第(1)步建的cas项目src下。

我实际用到修改的就是这俩项目。

然后删除WEBINF/lib下的cas-server-core-4.0.0.jar和cas-server-support-jdbc-4.0.0.jar包(先删除你项目的classpath引用)。

然后现在cas项目就差不多是完整版了,想修改加密,还是想修改查询数据库,还是debug调试都可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值