前后端分离(Vue + SpringBoot)整合CAS的单点登录

网上查询了一些单点登录的方案,综合分析貌似CAS最靠谱,于是毫不犹豫的扎进了CAS的坑中。。。

前方高能→前端配合修改小哥吐血鼎力支持,博客:http://www.musheng.art/blogs/tech/sso/CAS认证前后端分离单点登录调研.html#实施

公司项目都是前端Vue 后端SpringBoot的前后端分离架构,尝试过SpringBoot整合CAS的小伙伴都知道,其实配置是很简单的,在此不详叙述,关键点在于前端Vue发起的是ajax请求,是XMLHttpRequest,而正常CAS单点登录页面重定向后返回的状态码是302,Vue捕捉不到这个状态码,导致前端无法实现页面的重定向。

我下载使用的CAS-Server版本是5.2.0的,客户端引入的cas-client-core版本是3.4.1的,我是对cas-client-core的源码进行的修改和重新编译。找到AuthenticationFilter类的doFilter()方法,可以看出是在方法最后进行了页面的重定向,我对这个重定向进行了修改,改为返回特定的状态码(此处返回401)代码贴上:

                    PrintWriter out = response.getWriter();
                    response.setContentType("application/json; charset=UTF-8");
                    String http = "";
                    String redirectUrl = serviceUrl;
                    if(redirectUrl.contains("https://")){
                        http += "https://";
                        redirectUrl = redirectUrl.substring(8);
                    }else if(redirectUrl.contains("http://")){
                        http += "http://";
                        redirectUrl = redirectUrl.substring(7);
                    }
                    int index = redirectUrl.indexOf("/");
                    String host = redirectUrl.substring(0,index+1);
                    out.println(new AResponse(401,http + host + "redirect"));
//                    this.authenticationRedirectStrategy.redirect(request, response, urlToRedirectTo);

其中这个AResponse类只是封装的统一返回类,没别的方法,需要的小伙伴可以留言。

前端接收到这个401之后,会做相应的跳转,具体可以参考以上推荐的前端博客。

下面介绍客户端部分:

在controller中创建一个重定向的接口,方法如下:

@RequestMapping("redirect")
public String redirect(@RequestParam String url, HttpSession session) {
    String sessionId = session.getId();
    return "redirect:" +url+"?JSESSIONID="+sessionId;
}

这个方法的目的是将当前已认证过的sessionid带到重定向的页面。

到此,CAS的认证基本完成。

以下是本方案的bug之处:登录之后不能单点登出 哪位兄弟解决了麻烦分享下,感谢 抱拳。

特此申明:该方案经确认可实施!!!

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值