“CAS的服务记录是空的,没有定义服务”的异常解决

在搭建CAS单点登录系统时遇到服务未认证授权的问题,原因是服务端未记录客户端服务信息。通过查看控制台输出确认服务注册为空。解决方法是启用JSON服务识别并在配置文件中设置忽略HTTPS安全协议,重启服务后成功加载服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 异常现象

我在利用cas-overlay-template搭建单点登录服务器的时候,服务器正常启动起来,然后我又搭建了一个cas客户端,配置好了与服务器的连接,结果在访问客户端的时候,浏览器出现如下提示信息:

"未认证授权的服务

CAS的服务记录是空的,没有定义服务。 希望通过CAS进行认证的应用程序必须在服务记录中明确定义。"

 

二. 异常原因

根据提示信息,说是在cas服务端中没有定义服务,其实就是需要我们在服务端记录每个客户端信息,这样才能通过认证。于是我打开cas

服务端的控制台,仔细看了一下,发现控制台提示:

“Loaded[0] services(s) from [InmemoryServiceRegistry...]”,看来真的是没有记录任何认证的服务信息。详细如下图所示:

 

我的cas服务端代码中,其实已经配置好了服务的json信息,代码如下:

{
   "@class":"org.apereo.cas.services.RegexRegisteredService",
   "serviceId":"^(http|https|imaps)://.*",
   "name":"casclient",
   "id":10000,
   "description": "cas client based on spring security",
   "evaluationOrder":1
 }

application.properties中的内容如下:

 spring.aop.auto=true
 spring.aop.proxy-target-class=true
 ​
 ## 认证的用户名和密码
 # CAS Authentication Credentials
 # 默认的用户名,caseuser;默认的密码:Mellon
 cas.authn.accept.users=casuser::Mellon
 ​
 #加载json资源
 cas.serviceRegistry.json.location=classpath:/services

这说明其实在cas服务端和客户端之间,已经建立了关联关系,但是从“Loaded[0] services(s) from [InmemoryServiceRegistry...]”的提示信息来看,说明cas服务端中,没有读取到客户端的信息。

三. 解决办法

其实解决办法也很简单,只需要在application.properties中添加如下2行代码:

#是否开启json识别功能,默认为false
cas.serviceRegistry.initFromJson=true
#忽略https安全协议,使用 HTTP 协议
cas.tgc.secure=false

然后再重新启动cas服务端项目,观察控制台,提示如下:

可以看到,已经成功加载识别了一个service,这样就好了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一一哥Sun

您的鼓励是我继续创作的动力哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值