CAS单点登录服务器搭建
关于cas单点登录的原理及介绍这里不做说明了,直接开始:
1、war包下载
去官网(https://www.apereo.org/projects/cas/download-cas)下载cas_server-webapp_xxx.war文件,这里使用的是cas-server-webapp-4.0.0.war。(这里吐槽下,由于cas源码及war包都已经放到github上面去了,导致下载速度很慢或者无法下载,最后无奈之下去CSDN下载了。。。)
2、创建证书
证书是单点登录认证系统中很重要的一把钥匙,客户端于服务器的交互安全靠的就是证书;由于是个人学习测试所以就直接用JDK自带的keytool工具生成证书;如果以后真正在产品环境中使用肯定要去证书提供商去购买,证书认证一般都是由VeriSign认证,中文官方网站:http://www.verisign.com/cn/
用JDK自带的keytool工具生成证书:
keytool -genkey -alias cas -keyalg RSA -keystore e:/keys/cas
根据提示信息输入相关数据回车即可(这里注意要记住创建时的密码)。
3、导出证书
keytool -export -file e:/keys/cas.crt -alias cas -keystore e:/keys/cas
如果提示:
keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect
那么请输入密码:changeit
至此导出证书完成,可以分发给应用的JDK使用了。
4、为客户端的JVM导入证书
keytool -import -keystore "C:\Program Files\Java\jdk1.8.0_101\jre\lib\security\cacerts" -file e:/keys/cas.crt -alias cas
同第3步一样,如果提示输入密码,请输入changeit,至此证书的创建、导出、导入到客户端JVM都已完成,下面开始使用证书到Web服务器中,这里我使用的是tomcat7服务器。
5、应用证书到web服务器
打开tomcat目录的conf/server.xml文件,设置如下:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="e:/keys/cas" keystorePass="111111"/>
参数说明:
- keystoreFile:在第一步创建的key存放位置
- keystorePass:创建证书时的密码
6、启动tomcat服务器
将第1步下载好的war包放到tomcat的webapp目录下,启动tomcat,访问https://localhost:8443/cas/login页面,输入casuser/Mellon可以成功登录表示服务器已经搭建完成。
查看配置文件deployerConfigContext.xml可以获取默认的用户名和密码信息,后续会详细说明该配置文件。
登录成功
7、数据库用户认证方式配置
在之前的步骤里面,我们已经初步完成了cas单点登录服务器的搭建,但是很明显上述用户的验证方式不是我们想要的,下面我们来进一步配置cas服务器怎么读取数据库的信息进行身份验证,首先打开:
webapp/cas/WEB-INF/deployerConfigContext.xml
然后进行如下配置修改:
<!--**********************************注释*****************************************************
<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />
**************************************注释**************************************************--> <entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver" /> <!--**********************************注释***************************************************** <bean id="primaryAuthenticationHandler" class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler"> <property name="users"> <map> <entry key="casuser" value="Mellon"/> </map> </property> </bean> **************************************注释**************************************************--> <!--**********************************新增**************************************************--> <!-- Define the DB Connection --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" p:driverClass="com.mysql.jdbc.Driver" p:jdbcUrl="jdbc:mysql://localhost:3306/ssm?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8" p:user="root" p:password="1234" /> <!-- Define the encode method--> <bean id="passwordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" c:encodingAlgorithm="MD5" p:characterEncoding="UTF-8" /> <bean id="dbAuthHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler" p:dataSource-ref="dataSource" p:sql="select password from t_user where username=?" p:passwordEncoder-ref="passwordEncoder"/> <!--***********************************新增*************************************************-->
最后,加入以下依赖包:c3p0-0.9.1.2.jar,MySQL-connector-Java-5.1.21.jar,cas-server-support-jdbc-4.0.0.jar
重启tomcat服务器,发现已经可以使用数据库用户进行登录了。
----------------------------------------------------------------------------------------------------------------------------
ps:除了代码之外,咱还可以聊点别的,有兴趣可以关注我的个人微信公众号!