先说单点登录是个啥?
单点登录主要用于多系统集成,即在多个系统中,用户只需要到一个中央服务器登录一次即可访问这些系统中的任何一个,无须多次登录。
配置的步骤如下:
1.生成安全证书
Cas server默认的安全认证是基于https协议的,这就要求在应用程序和CAS Server端配置SSL协议。(当然也可以在cas server中配置让其可以用http访问)
要使用https协议,就需要使用安全证书,这里我们通过JDK自带的应用keytool来制作。这种自用的证书是不受浏览器信任的。(会提示,但是选择高级选项,直接访问就行)
生成安全证书使用keytool,keytool是一个Java数据证书的管理工具。
keytool将密钥(key)和证书(certificates)存在一个称为密钥库keystore的文件中,在keystore里,
包含两种数据:
密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密)
可信任的证书实体(trusted certificate entries)——只包含公钥
步骤:
1)用keytool生成密钥库keystore
2)用keytool在密钥库keystore中导出证书cer文件
3)将证书导入到jdk中的信任的证书库cacerts
前两个网上搜索方法,下面只说第三步如何操作:
Win7及以上系统的话请在管理员模式下运行命令提示符窗口。修改对应内容后在命令提示符执行以下命令:
cd D:\jdk1.7.0_21\jre\lib\security
keytool -import -alias localhost -file D:\localhost.cer -noprompt -trustcacerts -storetype jks -keystore cacerts -storepass 123456
其中,
D:\jdk1.7.0_21\jre\lib\security是jdk安装路径及其下面的对应目录,
-alias localhost是选择密钥别名,
D:\localhost.cer是导入的cer公钥证书文件路径,
-storepass 123456是设置密钥密码。
附:如果导入失败,可以先把security目录下的cacerts删掉。
如果出现“Caused by: sun.security.validator.ValidatorException: PKIX path building failed:”很大概率是证书导入失败(即使是显示导入成功了)或者程序运行的JDK不是导入证书的JDK。
(一定要注意这个问题,被坑过!!)
2.在tomcat中配置端口使用ssl协议
注意哪个端口配置了ssl协议,就只有哪个端口可以使用sll链接(同样的在cas客户端配置的时候踩坑提醒!)
配置说明:
在Tomcat目录下conf/server.xml文件中,将以下命令的对应内容修改后拷贝到<Connector>同级的位置(可以看到有和以下命令类似的被注释掉的代码)。红色字为需要按照实际情况修改的内容,下同。
Tomcat 7:
<Connector SSLEnabled="true" clientAuth="false" maxThreads="150" port="8443" protocol="org.apache.coyote.http11.Http11Protocol" scheme="https" secure="true" sslProtocol="TLS" keystoreFile="E:\localhost.keystore" keystorePass="123456"/>
Tomcat 6:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="E:\localhost.keystore" keystorePass="123456"/>
其中,
keystoreFile="E:\localhost.keystore" keystorePass="123456",指的是所密钥的位置和密钥的密码(安全密钥为目录下的localhost.keystore文件,密码已经设置为123456)。
port="8443"指的是https端口号,建议使用8843。
3.部署cas server服务器
在github上下载cas server 的4.1.1的版本(大家可以尝试别的版本),但是在使用4.0.0的过程中发现一个bug,困扰我很久,就是有时候登录和退出需要操作两次,网上有人说可能是请求异步的原因,后来换成4.1.1版本后就好了 。
将这个文件夹导入eclipse,在tomcat上部署运行即可。
然后访问该项目https://localhost:8443/cas-server-webapp,跳转到登录页面
到这里,我们的需求是输入用户名密码,然后cas server去数据库查询比对,正确就登录成功。那么数据库的查询配置在哪呢?
找到src/main/webapp/web-inf//cas-server-webapp/src/main/webapp/WEB-INF/deployerConfigContext.xml
<!--配置查询的数据源,这个bean是自己添加的-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/shirotest"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<!--注意原来就有这个bean,提供了一个测试的用户名和密码,现在修改它。-->
<bean id="primaryAuthenticationHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="dataSource" ref="dataSource" />
<property name="sql" value="select password from account where name=?" />
</bean>
这样数据数据库中的用户名和密码就能访问成功了。