首页 > 技术文章 > 前后端分离中使用CAS认证

srczhang 2021-09-15 15:37 原文

跨域问题

CAS登录过程
Browser -> CAS -> Browser(ticket) -> BackEnd(验证ticket) -> Browser
前后端分离中,后端返回302让浏览器跳转到CAS认证中心时因为ajax跨域被阻止,这里提供一种解决思路。
在前端检测登录状态,未登录则直接(带着service)跳转到CAS认证中心。登录后认证中心会让浏览器跳转回service中的路径,前端取service和ticket发给后端,
后端手动验证ticket是否有效,请求地址如下(Get请求)。成功则会返回一个包含用户信息的xml,可以直接用regex筛选,未找到即为验证失败。

String validateUrl = serverUrlPrefix + "p3/serviceValidate?ticket=" + ticket
                     + "&service=" + URLEncoder.encode(service, "UTF-8");
//正则表达式提取字符串
public static void pickByRegex() {
    String line = "<cas:user>admin</cas:user>";
    String regex = "<cas:user>(.*)</cas:user>";
    Matcher matcher = Pattern.compile(regex).matcher(line);
    if (matcher.find()) {
        System.out.println(matcher.group(0));
        //提取出的值
        System.out.println(matcher.group(1));
    }
}

推荐阅读