我已經參與了SPA和安全方面的兩個項目。最後一個是GWT + Spring Security。我相信你可以一起使用Angular和Spring Security。
不幸的是,Spring Security AFAIK沒有內置的配置參數'我們處於SPA模式'。因此,Spring Security方面的一些調整/配置將是必要的。示例: 想象一下,在登錄期間,您將調用內置到Spring Security登錄控制器中。在成功驗證的情況下,默認情況下,用戶將被重定向到索引頁面,在失敗的情況下,它將被重定向到相應的錯誤頁面。對於標準Web應用程序來說,這對於SPA Web應用程序來說並不那麼有用。在SPA的情況下,您需要檢測AJAX調用並打印帶成功案例的用戶名/角色的JSON,或發送401代碼失敗(然後在JS中檢測401並顯示相應的錯誤)。您可以使用Spring Security的相應擴展點來執行此操作:AuthenticationSuccessHandler
和AuthenticationFailureHandler
。
有些另一件事來調整:在默認情況下後會話過期的用戶將被重定向到登錄頁面(和SPA應用程序接收登錄頁上到下一個AJAX調用的響應)。
展望我的個人經驗一般指南將如下所示:登錄後將角色列表加載到JS中。用它在UI端顯示/隱藏相應的組件。 也在服務器端應用相同的限制列表。爲了確保用戶不在瀏覽器中編輯JS(儘管在某些中等大小的應用程序縮小了JS的情況下,它將會非常複雜)。在服務器端,你必須選擇之間:
- 安全網址的AJAX調用
- 安全上的一些Java方法。
我更喜歡第二個(服務上的安全業務方法)。我認爲它更方便,因爲我們通常希望獲得安全的業務操作,而不是某些端點。作爲優勢,您將能夠通過其他協議公開您的業務邏輯,並且安全性已經存在。從另一方面,我可以想象一些業務需求對不同的端點/協議擁有不同的權限。所以這取決於你的實際情況。
Lage size JS應用程序必須拆分成模塊。爲了減少直接的依賴關係,最好使用直接調用的事件在模塊之間進行通信。有關Addy Osmany關於如何在這些文件中進行安全性的有趣想法。我沒有找到它的好鏈接,也許this或this將是有益的(搜索「權限」)。
隨時發佈任何問題。祝你好運。