利用SpringBoot集成SpringSecurity+CAS实现单点登录

项目依赖

主要依赖如下:

利用SpringBoot集成SpringSecurity+CAS实现单点登录

 

项目配置

Application配置。

利用SpringBoot集成SpringSecurity+CAS实现单点登录

 

增加CAS参数配置

这里分为CASServer配置和CASService配置。其中Server是CAS服务的配置,Service是我们自己服务的配置。

利用SpringBoot集成SpringSecurity+CAS实现单点登录

 

配置内容如下

利用SpringBoot集成SpringSecurity+CAS实现单点登录

 

后面需要根据实际配置再拼接参数。

SpringSecurity Bean配置 SecurityConfiguration.java类:

利用SpringBoot集成SpringSecurity+CAS实现单点登录

 

利用SpringBoot集成SpringSecurity+CAS实现单点登录

 

ServiceProperties :服务配置,我们自己的服务。

CasAuthenticationFilter:CAS认证过滤器,主要实现票据认证和认证成功后的跳转。

LogoutFilter:注销功能

Spring Security配置

利用SpringBoot集成SpringSecurity+CAS实现单点登录

 

利用SpringBoot集成SpringSecurity+CAS实现单点登录

 

到此SpringBoot、SpringSecurity、CAS集成结束。但是这样配置有一个问题,那就是如果我们登录之前的请求是带参数的,或者跳转的不是首页,那么就会出现登录成功之后直接跳转到主页,而不是我们想要访问的页面,参数也丢失了。下面我们来解决这个问题。

处理回跳地址

处理的思路是,在登录之前记住访问地址及请求参数,在登录成功之后再取到这个地址然后回跳到对应的地址。

首先我们需要写一个过滤器来获取我们的请求地址,并放到Session中。

利用SpringBoot集成SpringSecurity+CAS实现单点登录

 

然后在CasWebSecurityConfiguration中增加对应的配置。

利用SpringBoot集成SpringSecurity+CAS实现单点登录

 

然后扩展SimpleUrlAuthenticationSuccessHandler来实现我们的功能。

利用SpringBoot集成SpringSecurity+CAS实现单点登录

 

最后将CasAuthenticationFilter中的SimpleUrlAuthenticationSuccessHandler替换为MyUrlAuthenticationSuccessHandler就可以了。

这里需要注意一个问题,由于CAS回调是访问的/login/cas(这里是我的配置),所以过滤器一定不能拦截/login/cas否则HttpParamsFilter会将/login/cas放到Session中,就出现了无限循环。

1. 访问http://host/?id=1 -- session: /?id=1
2. CAS登录成功,然后回跳到login/cas?ticket=xxx -- session: login/cas?ticket=xxx
3. 验证票据成功NeteaseUrlAuthenticationSuccessHandler处理跳转,从session中获取跳转地址:login/cas?ticket=xxx
4. 跳转到`login/cas?ticket=xxx`然后重复步骤 2-4

主要是我们保留了请求中的参数,所以一直会有票据信息。所以就出现了无限循环。如果没有保留票据信息,就直接报错了,因为第二次访问的时候票据丢了。

由于我的是单页应用,所以我直接拦截主页就可以了。

另一种处理方法是在HttpParamsFilter判断访问地址,如果是login/cas就不更新Session中的值。

喜欢的小伙伴,点个关注吧!

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值