CAS6的源码提供了默认的HTTPSandIMAPS-10000001.json配置用于授权所有的https和imaps服务,但是当添加JsonServiceRegistry模块启动后,会发现service是没有被注册的,是由于json路径引起的错误,可以把路径修改为绝对路径以解决此问题。
文章目录
- 问题描述
- 问题调试
- 解决方案
问题描述
CAS默认采用json的方式去文件中读取服务的定义从而注册服务。但是需要添加cas-server-support-json-service-registry的依赖。
在源码构建的方式下,添加了依赖后,启动项目,依然会发现没有服务被注册,提示如下:
INFO [org.apereo.cas.services.AbstractServicesManager] - <Loaded [0] service(s) from [JsonServiceRegistry].>
常见的使用的配置如下(CAS6.6):
##
# Service Registry(服务注册)
#
# 开启识别Json文件,默认false
cas.serviceRegistry.core.init-from-json=true
#自动扫描服务配置,默认开启
#cas.serviceRegistry.watcherEnabled=true
#120秒扫描一遍
cas.serviceRegistry.schedule.repeatInterval=120000
#延迟15秒开启
# cas.serviceRegistry.schedule.startDelay=15000
##
# Json配置
cas.serviceRegistry.json.location=classpath:/services
查看项目启动时候的日志,能够发现就是路径引起的问题:
INFO [org.apereo.cas.services.resource.AbstractResourceBasedServiceRegistry] - <Watching service registry directory at [/Users/atfwus/open_proj/cas-6.6.x/webapp/cas-server-webapp-init/build/resources/main/services]>
INFO [org.apereo.cas.util.io.PathWatcherService] - <Watching directory path at [/Users/atfwus/open_proj/cas-6.6.x/webapp/cas-server-webapp-init/build/resources/main/services]>
因为去init模块的build文件中找,会发现service相关配置根本不在这里面。所以我们需要更改路径。
问题调试
在类org.apereo.cas.configuration.model.support.services.json.JsonServiceRegistryProperties的父类SpringResourceProperties中,是相关资源的定义。
可以看到默认的路径:
查看SpringResourceProperties的注释可以发现:
是可以用绝对路径来表示资源的。
于是我们可以考虑使用绝对路径来表示出service目录的具体位置。
解决方案
将和location相关的配置修改为:(绝对路径的方式,指向cas-server-webapp模块的build文件中的资源文件)
cas.serviceRegistry.json.location=file:/Users/atfwus/open_proj/cas-6.6.x/webapp/cas-server-webapp/build/resources/bootRun/services
重启项目,看到如下提示就是服务配置加载成功:
总结:
- cas默认使用service文件路径使用classpath相对路径的方式表示,但实际上存在问题,导致去init模块的build文件去找了,而不是去cas-server-webapp模块的build文件找。
- 可以使用绝对路径的方式解决上述问题。
ATFWUS 2023-07-27