【问题贴】springboot+前后分离+各种跨域+整合cas

本文记录前后分离项目整合CAS时遇到的问题。项目用Nginx作前端容器,反向代理解决跨域。整合CAS后,ajax请求被重定向到登录页,改造js后虽可登录但请求仍302。调试发现页面请求API无session,cookie为空,最终成功解决前后分离问题。

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

最近接触到了sso遇到了一个问题,我大致描述下情况,记录下问题,方便以后查阅,小白帖不定期更新。

如若对cas,sso等没有一定的了解,至此劝退,不浪费阅读时间

下面,请开始思维碰撞的表演:

背景:所有项目都在本地测试,故cas端口8080,前后端不分离项目端口8081,前后分离项目后端springboot端口8082(各种项目,分离,不分离,各种框架,均要整合sso......)至此,项目背景大致介绍完毕。

问题:前后分离的项目,代号A。A项目用Nginx作为前端容器,另通过反向代理,解决了和后端跨域的问题。A项目某个页面,有个按钮,会请求后端api,如果,不整合cas,情况应该是登录、认证巴拉巴拉一顿操作,我请求api,拿到数据;但是整合cas后,得先去cas认证,认证通过后,你才可以拿到数据。

整合cas后,我到A的index.html页面,点击按钮或者其他,发送ajax请求,ajax请求到A后端后,cas-filter拦截,发现没认证,302到cas登录页,在这个过程中,你之前发起的ajax请求其实被redirect到了cas的login.html页面。

本以为,cas登录完事后,会重新给我302到A的index.html,之后我请求api,应该不再是302,而是给我200,返回正常的数据。然鹅,事实是,浏览器没有跳转,只是帮我去请求了cas的登录页,把页面数据给我返回了过来。。。本质是,ajax不支持重定向。

尽管,随后对页面js进行改造, 通过获取响应头的content-type来判断是不是把网页请求过来了,进而通过location跳转。改造后,可以跳转到cas登录页,也可以登录,回调也正常。然鹅,悲剧的是,点击按钮发送的ajax请求,仍然不能获取结果集,还是在302,因为第一次从cas回调过来时候,有st,所以这次302到cas后,cas认证通过,又给跳转回来。再点击,还是这样,这是一个死循环。

之后,通过调试发现,index.html页面请求的api,没有获取到session,浏览器的cookie里空空如也。因为没有session,所以,在过A的后端时候,cas-filter直接就认为是未登陆,给302到cas了,但是因为有st,所以,cas认为这次认证ok,又给回调回来。结果就是,cookie里空空如也啊。。。。。。

现在就是纠结cookie的里没有sessionid,不知道具体什么情况,也不知道页面通过判定响应头类型靠谱不。哎,目前就是这样。

假定,之前做的都是对的。那么,cookie为何为空,也就是为啥没生成session。。。

仍需要埋头苦干啊。。。

拓展链接:https://segmentfault.com/a/1190000015235402


哈哈哈,经过一番努力,前后分离的问题,解决啦~~

痛苦三天,就今天开心~.~

拓展链接:https://blog.youkuaiyun.com/qq_21251983/article/details/87631991 

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值