spring security集成cas重定向问题

本文主要探讨了在Spring Security集成CAS单点登录时遇到的重定向问题。由于微服务架构中多个系统共用同一网关,导致重定向地址固定,无法正确返回前端。解决方案是利用HttpSessionRequestCache保存原始请求,并在成功认证后从session中恢复SPRING_SECURITY_SAVED_REQUEST,从而获取正确的重定向URL。具体实现代码和详细步骤文中有所提及。
摘要由CSDN通过智能技术生成

       项目中用到了springSecurity作为认证,并且要对接sso单点登录,因为是微服务,还需要在微服务的uaa中进行认证。当前的方式是网关gate中集成cas的springsecurity包,然后sso认证登录成功后在去uaa认证获取token,通过重定向返回前端token。

    存在的问题是,当各个系统使用同一个网关,因为重定向地址是写死在配置文件中,重定向就存在问题。

    通过跟踪代码,当访问cas的登录拦截/login/cas?redirectUrl=http://localhost:8089 (注意:此处的参数名称不能是service,否则重定向会出现问题,servcie是cas的一个参数的关键词)的时候,刚进去的时候在

RememberWebAuthenticationDetails类中能够获取到重定向参数,但是后续cas的代码会重定向到sso进行认证,并且返回ticket,此时又进入了上述方法,因为请求是不同的,所以session,进程都是不同的。将之前redirectUrl覆盖了。并且也没有一个唯一的key值能够保存重定向url,以方便在处理成功后获取重定向url。

     最后在同事的帮助下,找到了方法,是采用HttpSessionRequestCache的方式保存住跳转前的request请求,然后在处理成功重定向的地方通过session获取SPRING_SECURITY_SAVED_REQUEST的值。该值就是跳转前的request请求。

代码实现如下:

保存requestCache:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值