最近用了CAS做SSO,截止目前最新的版本是4.2.6,我们选了4.2.5,觉得较为稳定一些,为了配置连接MySql花了很多功夫,于是决定分享一下,避免以后走弯路。
网上的配置大都停留在3.x版本上,只配置xml就行,但是jasig在4.x版本以后,需要配置cas.properties文件,网上没找到现成的资料,愁的头疼。
由于jasig的网站和git上的地址都换了,所以官方的文档找不到了,几经波折,发现了官网的文档地址:
其实根据文档配置就好了,在这里翻译一下,另外标注几个需要注意的点:
1、下载依赖的jar包,最方便的是用maven,直接就把依赖的所以jar都下载了,对于我这种maven用的不溜的,想了个笨办法:在Eclipse建一个maven项目,填写dependency,version:4.2.5(最新4.2.6),等maven upate结束,打成war包,再解压,所有的依赖jar包都在 lib里了。简单粗暴。
org.jasig.cas
cas-server-support-jdbc
${cas.version}
2、cas-server-support-jdbc需要依赖的包:
c3p0
Mysql的jdbc驱动包(根据数据库自行选择)
所有依赖jar包放到cas-server-webapp的WEB-INF的lib下。有冲突的覆盖或跳过都没问题。版本一致就好。
3、在tomcat里找到cas的配置文件:deployerConfigContext.xml 、 cas.properties 进行配置。
4、配置deployerConfigContext.xml
注释掉:
增加数据库连接池配置:特别注意的是:jdbcUrl的配置,里面如果有“&” 的,要替换成“&”,不替换tomcat启动的时候报错:【对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾】,另外,jdbcUrl根据具体情况配置,不是固定写法。
class="com.mchange.v2.c3p0.ComboPooledDataSource"
p:driverClass="com.mysql.jdbc.Driver"
p:jdbcUrl="jdbc:mysql://127.0.0.1:3306/sso_test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull"
p:user="fiad"
p:password="fiad"
p:initialPoolSize="6"
p:minPoolSize="6"
p:maxPoolSize="18"
p:maxIdleTimeExcessConnections="120"
p:checkoutTimeout="10000"
p:acquireIncrement="6"
p:acquireRetryAttempts="5"
p:acquireRetryDelay="2000"
p:idleConnectionTestPeriod="30"
p:preferredTestQuery="select 1" />
我这里偷了个懒,把jdbc的配置直接写xml里面了,也可以配置变量,然后具体值写到cas.properties里,可以参考官方文档。
官方提供了四种方式配置数据库验证。
第一种:配置sql语句 :QueryDatabaseAuthenticationHandler
在xml里加入:
在cas.properties里加入:此文件中原本就有这行配置,是被注释掉的,可以放开,或者直接复制进去就行,【=】号后面的是查询mysql的sql语句,根据用户名查密码。需要自己更改。
cas.jdbc.authn.query.sql=select password from users where username=?
都保存了,重启tomcat做实验就行啦。
目前只实现了这一种,2,3,4种方法,在官方文档里都有说明,请参照,另外说明一下,目前这种方法是没有加密的,即密码是明文的,回头研究一下加密方式的,再开个新贴。