实战:CAS搭建
一、CAS服务器的搭建
【1】下载CAS服务器的源码,我下载的是CAS Maven WAR Overlay的分支4.2.X版本
注:如若不想了解查找下载地方过程,请直接参见(3)的链接地址
(1)CAS官网地址:https://www.apereo.org/projects/cas
(2)点击后可以找到如下地址:https://github.com/apereo/cas,点击Overlay,
跳转到https://apereo.github.io/cas/5.1.x/installation/Maven-Overlay-Installation.html,
点击下图CAS Maven WAR Overlay进入github:https://github.com/apereo/cas-overlay-template
(3)下载CAS-SERVER:https://github.com/apereo/cas-overlay-template
值得注意的是① 4.1版本与4.2之后的版本配置方式有所不同,所以请下载4.2或之后的版本,本例以4.2版本为例。
② 本人原本想通过idea复制github链接进行直接下载,由于没有SSH配置导致idea无法下载,所以改用下载ZIP方式,如想用命令或idea的github进行直接下载,请自行百度配置方法。
【2】CAS-SERVER配置
解压ZIP包,使用idea打开项目
(1)在WEB-INF/spring-configuration/propertyFileConfigurer.xml中,对cas.properties的位置进行修改。
注:由于在windows下进行实验,所以需要修改cas.properties的所处位置,并将etc下的cas.properties放置在相应位置;如果是linux系统,可直接将文件放置在/etc/cas/config下,无需更改配置文件。
<util:properties id="casProperties" location="file:D:\webserver\cas\cas.properties" />
(2)pom.xml
所下载的项目应该是默认使用war打包,为以防万一还是确保package方式为war
检查pom.xml中<packaging>war</packaging> 是否为该配置
【3】打包
使用 mvn package 命令进行打包,生成war文件,我将其更名为cas.war
【4】tomcat的相关配置
cas默认使用HTTPS请求,所以可以有一下两者结局方案:
(1)修改cas项目配置文件,增加HTTP支持
打开${TOMCAT_HOME}\webapps\cas\WEB-INF\classes\services\HTTPSandIMAPS-10000001.json
修改 "serviceId" :"^(https|imaps)://.*", 为 "serviceId" : "^(https|imaps|http)://.*",
(2)tomcat增加https支持
① 使用keytool创建证书
打开命令行,进入${JAVA_HOME}\bin目录,输入keytool -genkey -alias tomcat -keypass changeit -keyalg RSA -keystore server.keystore
注:口令为changeit,这里的名字与姓氏指的是你的服务器域名,由于我们是本机测试所以使用localhost,其他可不填
此时${JAVA_HOME}\bin下会有一个server.keystore文件
② 导出证书
keytool -export -alias tomcat -keypass changeit -file server.crt -keystore server.keystore
输入密码changeit
③ 将证书导入jre可信任区
keytool -import -alias tomcat -file server.crt -keypass changeit -keystore C:/JDK8/jre/lib/security/cacerts
输入密码changeit
注:这里的路径要与tomcat配置的路径一致
④ 配置tomcat
打开${TOMCAT_HOME}\conf\server.xml,将端口为8443的代码注释解除,并进行如下修改:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="C:/JDK8/bin/server.keystore"
truststoreFile="C:/JDK8/jre/lib/security/cacerts"
keystorePass="changeit"/>
注释代码AJP代码: <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
⑤运行startup.bat文件,访问https://localhost:8443,出现下图表示配置完成
【5】部署
将打包的cas.war文件放置在${TOMCAT_HOME}\webapps下,进入${TOMCAT_HOME}\bin下,运行startup.bat文件。
【6】测试
https://localhost:8443/cas/login
用户名:casuser
密码:Mellon
二、CAS客户端的搭建
【1】创建Spring Boot项目,在pom.xml增加cas-client
<dependency>
<groupId>net.unicon.cas</groupId>
<artifactId>cas-client-autoconfig-support</artifactId>
<version>1.5.0-GA</version>
</dependency>
【2】创建一个cas配置类
package com.cssweb.config;
@Configuration
@EnableCasClient
public class CasConfigure extends CasClientConfigurerAdapter {
@Override
public void configureAuthenticationFilter(FilterRegistrationBean authenticationFilter) {
super.configureAuthenticationFilter(authenticationFilter);
authenticationFilter.getInitParameters().put("authenticationRedirectStrategyClass","com.patterncat.CustomAuthRedirectStrategy");
}
}
注:EnableCasClient注解开启cas-client服务
【3】添加一个控制类
package com.cssweb.controller;
@RestController
@RequestMapping("user")
public class UserController {
@RequestMapping("queryUser")
public Map<String, String> queryUser(HttpServletRequest request){
Map<String,String> map = new HashMap<>();
map.put("name", "jcz");
map.put("session", request.getSession.getId())
return map;
}
}
注:访问 ip:port/user/queryUser进行cas测试
【4】配置application.yml
cas:
server-url-prefix=https://localhost:8443/cas/
server-login-url=https://localhost:8443/cas/login
client-host-url=http://localhost:8080
validation-type=cas
【5】测试
浏览器输入:localhost:8080/user/queryUser,会重定向到cas的服务器进行登录
登录后:
三、其他问题
CAS is unavailable
由于本人在cas-server选择使用的是Tomcat增加HTTPS支持这种方式,没有在cas服务器中增加HTTP支持,而cas-client使用的是http,所以当登录CAS后出现报错 CAS is unavailable.因此,我又在cas服务器增加HTTP的支持,详见cas服务器搭建【4】
猜想:若客户端也使用HTTPS,我认为应该无需增加HTTP支持(没有亲测)。
四、Github地址
cas-server:
https://github.com/JIANGCHENZHOU/cas-overlay-template-4.2
cas-client:
https://github.com/JIANGCHENZHOU/cas
五、参考资料
tomcat增加HTTPS支持:
http://www.cnblogs.com/wanghaoyuhappy/p/5267702.html
http://www.cnblogs.com/shipengzhi/articles/2628849.html
springboot-cas-client:
http://blog.****.net/liuchuanhong1/article/details/73176603
https://segmentfault.com/a/1190000007278169