跨域問題
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));
}
}