前后端分离中使用CAS认证
跨域问题
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));
}
}
如有错漏,欢迎指正!谢绝转载。