CAS 6.0.3版本无法获取ST问题求助(5.3.1版本正常)
解决CAS 6.0.3 REST API获取服务票据(ST)返回空值的问题
我之前在CAS 6.x版本里碰到过一模一样的问题——日志明明显示ST已经生成,但接口返回空,而5.x版本完全正常。结合调试和官方文档的变化,给你几个可行的解决方向:
1. 调整请求方式与参数传递规则
CAS 6.x对REST接口的HTTP规范要求更严格,获取ST的请求必须满足以下条件(这也是和5.3.1版本的核心差异):
- 必须使用POST请求,不能用GET方式传递service参数(5.3.x允许宽松的GET请求,但6.x已完全遵循REST最佳实践)
- service参数要放在POST表单体中,而非URL参数里
- 请求头的Content-Type必须设置为
application/x-www-form-urlencoded
具体操作步骤(以Postman为例):
- 选择POST请求,URL填写已获取到的TGT地址:
https://localhost:8443/cas_server_war/v1/tickets/TGT-3-mXFuG9GXw9iMeXYa1pBACKww9JsgdsxUBDb0dV0zv0yhzUVyUVTFjnR6Q95k7Fh0534DESKTOP-97IVFIA - 切换到
Body标签,选择x-www-form-urlencoded格式 - 添加参数:
service=https://www.baidu.com - 确认请求头自动带上
Content-Type: application/x-www-form-urlencoded(Postman会自动生成) - 发送请求,即可正常获取到类似
ST-3-W9WaFfn2xUlTesZYtNejSW8yKRoDESKTOP-97IVFIA的ST字符串
2. 验证请求头的Accept设置
如果上述操作后仍无响应内容,可以尝试在请求头里添加Accept: text/plain。CAS 6.x返回ST时默认使用纯文本格式,若请求未指定Accept头,可能因内容协商失败导致返回空值。
3. 确认CAS配置文件的开关
虽然你已添加REST依赖,但可以检查cas.properties是否显式开启相关功能(若无则添加):
cas.rest.enabled=true cas.ticket.st.rest.api.enabled=true
这两个配置确保CAS加载REST接口的处理器和服务票据生成逻辑。
版本差异说明
CAS 6.x基于Spring Boot 2.x重构了Web层逻辑,对REST接口的规范遵循更严格;而5.3.x版本允许宽松的请求方式(比如GET传递参数),这也是为什么旧版本能正常工作的原因。
按照以上方法调整后,应该就能解决ST返回空的问题了。
内容的提问来源于stack exchange,提问作者peng
相关产品推荐
相关产品推荐

