Apereo CAS Client 项目源码地址:https://github.com/cas-projects/cas-sample-java-webapp
CAS 系列详解:https://blog.csdn.net/makyan/column/info/36060
上一节内容:https://blog.csdn.net/makyan/article/details/88878667
本节继上一节内容讲解
先从CAS源码库中下载CAS Client客户端的示例项目,我们在此项目基础上进行修改。
127.0.0.1 www.futurecloud-client1.com
127.0.0.1 www.futurecloud-client2.com
官方demo导入idea,并将项目名修改为cas-client1
cas-client1
修改web.xml,主要是cas服务端的地址和客户端的地址 ,
完整内容如下:
org.jasig.cas.client.session.SingleSignOutHttpSessionListener
CAS Single Sign Out Filter
org.jasig.cas.client.session.SingleSignOutFilter
casServerUrlPrefix
https://www.futurecloud.com:8443/cas
CAS Single Sign Out Filter
/*
CAS Authentication Filter
org.jasig.cas.client.authentication.AuthenticationFilter
casServerLoginUrl
https://www.futurecloud.com:8443/cas/login
serverName
http://www.futurecloud-client1.com:8051/
CAS Authentication Filter
/*
CAS Validation Filter
org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter
casServerUrlPrefix
https://www.futurecloud.com:8443/cas
serverName
http://www.futurecloud-client1.com:8051/
redirectAfterValidation
true
useSession
true
authn_method
mfa-duo
CAS Validation Filter
/*
CAS HttpServletRequest Wrapper Filter
org.jasig.cas.client.util.HttpServletRequestWrapperFilter
CAS HttpServletRequest Wrapper Filter
/*
CAS Assertion Thread Local Filter
org.jasig.cas.client.util.AssertionThreadLocalFilter
CAS Assertion Thread Local Filter
/*
index.jsp
注意:须保证客户端证书和服务端证书是同一个证书,不然就会报错。
由于我的服务端和客户端使用的jdk是同一个,所以,就不需要再为客户端导入证书了。
如果不使用同一个jdk,必须要在另一个jdk中导入相同的安全证书。
这里写图片描述
此时,启动客户端,我们可以访问,但是,cas的服务端为对此客户端授权,所以访问会报“未认证授权的服务”
访问: http:www.futurecloud-client1.com:8051
服务端日志出现警告,可以根据警告判断应该注册的域名是什么
根据警告,我们知道是因为没有注册域名 :http://www.futurecloud-client1.com:8051/
以上错误是因为客户端的域名没有在服务端进行注册,那么怎么注册呢?
在服务端的项目cas-overlay中,从overlays或者cas_war中把services目录拷贝到项目的资源目录resources里:
文件名按照规范用name-serviceId.json吧,里面的内容也很好理解:
{
"@class" : "org.apereo.cas.services.RegexRegisteredService",
"serviceId" : "^http://www.futurecloud.*",
"name" : "futurecloud",
"theme" : "apereo",
"id" : 10000003,
"description" : "futurecloud项目相关服务,授权 www.futurecloud 开头的服务",
"evaluationOrder" : 1
}
注意:services目录中可包含多个 JSON 文件,其命名必须满足以下规则:
n a m e − {name}- name−{id}.json,id必须为json文件中内容id一致。
对其中属性的说明如下,更多详细内容见官方文档-Service-Management。
● @class:必须为org.apereo.cas.services.RegisteredService的实现类
● serviceId:对服务进行描述的表达式,可用于匹配一个或多个 URL 地址
● name: 服务名称
● id:全局唯一标志
● description:服务描述,会显示在默认登录页
● evaluationOrder:定义多个服务的执行顺序
同时在application.properties里添加如下内容,开启服务端对json配置的读取:
org.apereo.cas
cas-server-support-json-service-registry
${cas.version}
配置好service之后,根据官方文档-service-registry,还需修改 application.properties 文件告知 CAS 服务端从本地加载服务定义文件
#开启识别json文件,默认false
cas.serviceRegistry.initFromJson=true
#自动扫描服务配置,默认开启
#cas.serviceRegistry.watcherEnabled=true
##120秒扫描一遍
#cas.serviceRegistry.repeatInterval=120000
##延迟15秒开启
##cas.serviceRegistry.startDelay=15000
#cas.serviceRegistry.managementType=DEFAULT
##资源加载路径
cas.serviceRegistry.json.location=classpath:/services
#cas.logout.followServiceRedirects=true
重启cas 服务端,打印如下日志,就证明services服务配置成功
2019-03-28 16:52:16,381 INFO [org.apereo.cas.services.AbstractServicesManager] -
2019-03-28 16:52:17,157 INFO [org.apereo.cas.authentication.PolicyBasedAuthenticationManager] -
2019-03-28 16:52:17,157 INFO [org.apereo.inspektr.audit.support.Slf4jLoggingAuditTrailManager] -
客户端注册到cas服务端的配置完成,访问客户端:http://www.futurecloud-client1.com:8051
成功跳转到cas 服务端的登录页面,输入用户名/密码登录后的界面如下:
测试多个客户端单点登录,配置跟上文一样,以此,我们配置了另一个客户端,域名为: www.futurecloud-client2