最近項目做一個統一portal,各個應用模塊統一入口,人員賬號統一。
單點登陸時序圖
應用A
應用B
在日常調試過程中遇到的跨域問題:
1、項目中支持跨域請求
- 使用@CrossOrigin注解
@CrossOrigin(origins = {"http://domain1.com", "http://domain2.com"})
當發生跨域請求時,瀏覽器會發起兩次請求,第一次為預檢請求,其請求方法為OPTIONS,第二次為真實請求。只有當第一次請求成功后才會發起第二次請求。這個時間間隔是上面例子中配置的maxAge(long)。
所以在攔截器或者過濾器對token進行驗證的時候處理,OPTIONS的請求是不會帶有認證信息,所以需要跳過OPTIONS請求。
String method = request.getMethod();
if(method.equals("OPTIONS")){
// 放行
} else {
// 驗證token
}
2、請求之間Cookie傳遞
- 不同域名之間Cookie不能傳遞
- 域名和ip之間Cookie不能傳遞
- 同一IP,不同端口Cookie是共享的
- 二級域名與二級域名之間Cookie傳遞,需要將Cookie域設置在頂級域名下
結合Nginx和本地hosts大多數單點登陸的場景都能覆蓋測試