一種跨域單點登入的解決辦法

2021-07-15 18:03:25 字數 616 閱讀 2741

現有多個應用,要求這幾個應用統一通過乙個**(假設該**的網域名稱是login.com)登陸,若乙個瀏覽器上成功登陸後,在同個瀏覽器下開啟其他應用無需再次登陸,也就是乙個瀏覽器只需登陸一次。

首先想到的是用cookie實現單點登陸:登陸成功後,login.com的伺服器生成乙個唯一的id並儲存到乙個表中,並向瀏覽器cookie中寫入該id,當其他應用接收到請求時,先檢查有無該id,若有則與login.com的登陸表中對照進行驗證,若無則重定向到登陸**。

但這種方式有乙個跨域的問題。如果統一登陸的幾個應用在和login.com在同一網域名稱下,則可以獲取cookie,如果分別在不同網域名稱下,則無法獲取到login.com的cookie.這樣其他應用無法獲取到login.com的cookie,其他應用的後台也就無法判斷瀏覽器的登陸狀態。

解決辦法:login.com的登陸採用ajax方式無重新整理登陸,在login.com登陸成功後,向瀏覽器發回相應,寫入登陸id,然後瀏覽器再次向其他每乙個應用的登陸action傳送請求,請求引數就是該id。其他應用的action收到該請求後,先在login.com的表中驗證,若驗證成功則在session中儲存該id,這樣所有其他應用對應同個瀏覽器的session中都儲存了login.com在該瀏覽器中寫入的id,實現了cookie的共享。

跨域解決辦法

解決跨域 本文通過設定access control allow origin來實現跨域。例如 客戶端的網域名稱是client.runoob.com,而請求的網域名稱是server.runoob.com。如果直接使用ajax訪問,會有以下錯誤 no access control allow origi...

跨域解決辦法

什麼是跨域 協議 主網域名稱 子網域名稱 埠有乙個不相同即跨域。如 在www.test.com 請求 www.abc.com下的介面 主網域名稱不同 在www.test.com 請求 m.test.com下的介面 主網域名稱不同 在www.test.com 請求 www.test.com 81下的介...

spring boot跨域解決辦法

專案中經常會遇到前後端分離的情況,分離之後會碰到跨域問題,前端無法訪問後端的介面。可以通過如下3種方式解決跨域問題。public class corsfilter implements filter override public void dofilter servletrequest servl...