先後端分離後的CAS單點登陸流程詳解

CAS 單點登陸Web工做流程

 

如圖流程清晰,能夠去官網瞭解https://github.com/apereo。css

下面看先後端分離的架構:html

假設公司有多個系統但願能統一登陸認證一次均可以訪問,如訂單管理系統(oms),商品管理系統(pms),客戶管理系統(crm),例如:用戶訪問 oms 系統攔截請求發現沒有登陸,就跳轉到cas server 去登陸,登陸完成後簽發一個ST,重定向到oms系統,oms拿着回傳的參數ST去CAS驗證,驗證經過後,容許用戶訪問資源,若是是先後端分離的應用,系統就由原來的單個應用,分爲先後端分開部署(動靜分離),前端的靜態服務(html,css.js),後端的(api接口),這時候用戶端瀏覽器先訪問前端加載靜態資源,而後再向後端api發起請求,後端api 接口經過過濾器鑑權。若是cas server 登陸後跳轉到後端服務地址確定是不行的,這時候能夠在服務端i在完成驗證後繼續跳轉到前端地址,index.jsp:前端

<%@ page import="com.ctrip.framework.apollo.ConfigService" %>
<%@ page import="com.ctrip.framework.apollo.Config" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
<%
   //不一樣環境前端地址不一樣(開發,生產)因此經過配置獲取
    Config omsConfig = ConfigService.getConfig("oms"); response.sendRedirect(omsConfig.getProperty("web.front.url","")); %>
</body>
</html>
 

這樣經過繼續跳轉最終到前端頁面。git

須要注意的地方:github

一、先後端分離後須要注意跨域的問題因此要在後端服務響應頭設置以下內容:web

httpServletResponse.addHeader("Access-Control-Allow-Origin", acaOrigin);//前端域名(不一樣環境不一樣能夠經過配置讀取)
httpServletResponse.addHeader("Access-Control-Allow-Methods","GET,POST,PUT,DELETE,OPTIONS"); httpServletResponse.addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, *"); httpServletResponse.addHeader("Access-Control-Allow-Credentials", "true");

二、前端訪問後端api 地址也要是能夠配置的,配置有兩種方式,一種在程序構建時注入,一種在程序運行時產生。高性能 Javascript》中有一節說起,「開發高性能應用的一個廣泛規則是,只要是能在構建時完成的工做,就不要留到運行時去作」因此前端在編譯的時候也須要根據不一樣環境變量,設置不一樣的後端地址。後端

相關文章
相關標籤/搜索