2013-12-20 90 views
0

我最近使用Angularjs和spring mvc實現和應用。 每件事情都很好。在我的實現中,我有一個將流重定向到服務器的路由提供程序。Angularjs和安全問題

下面是我的路線提供商的代碼

angularApp.config([ '$routeProvider', function($routeProvider) { 
$routeProvider.when('/', { 
    templateUrl : 'authenticate.do', 
    controller : 'DecideRoamingFlowController' 
}).when('/homePage', { 
    templateUrl : 'home.do', 
    controller : 'HomeController' 
}).when('/workPage', { 
    templateUrl : 'work.do', 
    controller : 'WorkController' 
}).when('/auth', { 
    templateUrl : 'work.do', 
    controller : 'WorkController' 
}).otherwise({ 
    redirectTo : '/' 
}); 

我的URL模式是一樣的東西

http://localhost:8080/angularapp/landing.do#/homePage 

我的流量是來自主頁的用戶輸入他的證書進行驗證,驗證後,他應該被重定向到workPage。

我的問題是,如果我在地址欄中手動更改從homePage到workPage的url值,我會得到工作頁面。身份驗證頁面通過,我不希望發生這種行爲。

我該如何解決這個問題?

請幫忙。

回答

3

AngularJS安全性應該在不同的級別上實現,可能需要一點點改變主意。因爲它是一個基於AJAX的客戶端框架,所以用戶(黑客)可能繞過您在客戶端實施的所有安全措施。因此,應該在服務器端實施安全性。另一方面,您總是必須檢查用戶是否被認證/授權訪問服務器上的資源並實施適當的錯誤處理。

這意味着,在客戶端,它可能會被允許看到workPage - 但沒有數據應該有呈現,除非用戶登錄

你的服務器應該給所有未經授權的AngularJS AJAX請求作出迴應。與狀態401和客戶端應該相應地處理。

另請參閱this answerthis answer

+0

謝謝你的建議。它看起來是最合乎邏輯的解決方案,所以肯定會嘗試一下。 – user1834664

0

由於您使用的是spring mvc,最好使用spring安全性,該安全性負責驗證,成功/失敗時重定向以及基於角色。

角方式:您可以使用事件偵聽器

 $rootScope.$on("$stateChangeStart", function(event, toState, toParams, fromState,    fromParams) { // Keep listening for the events and validate .. } 
0

安全性必須在服務器端完成:

  • 一切是在客戶端沒有固定
  • 你必須用Spring Security保護您的REST端點

這意味着黑客公司你可以看到你的「workPage」,但由於沒有數據可以從服務器加載,他只是看到一個頁面上有空的數據。

但是,使用Spring Security來保護AngularJS應用程序並不像看起來那麼簡單,因爲框架首先不適用於這種用法。我花了很多時間有工作的應用程序,我可以建議你看一看吧:

https://github.com/jhipster/jhipster-sample-app