參考:https://github.com/spring-guides/tut-spring-security-and-angular-js/tree/master/double
先看目標架構圖:
1.包含一個網關Gateway,兩個UI應用(分別爲UI和Admin),一個資源Resource應用,一個Redis(瀏覽器忽略)
2.無論是網關本身,還是兩個UI應用,還是資源應用,都要通過網關去訪問,而不能直接訪問UI應用或資源應用
3.網關,UI應用,資源應用都共享Redis.
4.認證放在了網關.所以網關要配置AuthenticationManagerBuilder(不然用戶來自那裏),session創建策略至少應設爲可創建(ALWAYS或IF_REQUIRED),其它幾個都可設爲不創建(NEVER).至於登出功能主要是銷燬redis session,即放在那個位置都應無所謂.
5.更細粒度的權限控制,比如全局方法控制,則應在對應的應用自身配置.
原文的圖應有錯,Admin和UI是不能直接訪問Resource的.否則又會造成跨域問題.
我的理解,假設在double\ui\src\main\resources\static\js\hello.js的$http.get('/resource/')
這裏使用相對路徑"/resource/"
,UI,Resource都是通過網關訪問的,那麼協議,端口,主機都相同,即有相同的源,不存在跨域;但改爲$http.get('http://localhost:9000/')
,這時候端口不一樣,就是跨域了.