2016-08-30 73 views
2

我在前端創建一個AngularJs項目,在後端創建一個Spring MVC項目。在Angular JS中使用Spring MVC處理會話處理

現在假設當使用登錄,如果想更新自己的信息,爲了這個,我已經創造了一個API,它請求EMAILID和該電子郵件ID的數據庫更新,其餘對象現在我有一些

問題,

1.)我不想在Angular中使用CookieStore或其他sessionStorage或localstorage(因爲我個人的漏洞經驗,我也只想使用會話),我該如何在與Spring MVC的角度做到這一點。

2.)如何從會話中檢索電子郵件ID以更新數據?

3)如果用戶轉到另一頁我怎麼能維持在另一個頁面那次會議上,我怎麼能檢查該會話是存在的,用戶是可信看到的網頁

讀了很多關於它,但無法找到確切的解決方案。那邊的回答是通過cookieStore.or localstorage進行管理的,請幫助

回答

2

讓我們試試看看這裏使用cookie發生了什麼是正確的方式,您可能認爲這不是安全的,但是是最安全的方式。使用Cookie,您將在所有選項卡中共享相同的會話,以便您可以處理所有選項卡並共享​​它。

此外,還有一個替代方案,並使用URL重寫,在計算器

會話引用@vanje在this question僅經由包含會話ID的URL參數標識。因此,您的Web應用程序的每個內部URL都必須使用HttpServletResponse.encodeURL()方法使用此參數進行增強。如果你使用Wicket這樣的web框架,很可能已經爲你完成了。

讓與角JS現在去 - Spring MVC的方法:

沒有必要的角JS前端內訪問會話,如果你需要使用它,你正在使用JSP你可能使用scriplet來檢索開放<%= session.getAttribute("user") %>的信息,但正如我所說的那樣,沒有必要這樣做。您可以調用您的函數,並在Spring中的控制器中檢索這些信息。 你有一個角度JS的控制器,在這種情況下,Spring會使用http調用你的REST控制器。假設你先救你的用戶會話:

$scope.getUserInfo= function() { 
     $http.get(appContextPath +'/rest/getuser/').success(function (data) { 
      $scope.user= data; 
     }); 
    }; 

你可能有上面的URL請求映射:

@RequestMapping(value = "/rest/getuser", method = RequestMethod.GET) 
@ResponseBody 
public User getUserInfo (HttpSession session) { 
    User nUser = session.getAttribute("user"); 
    return nUser; 
} 
+0

只是一個簡單的問題我不是。使用jsp我簡單地使用.HTML。在這種情況下,如何使用角度頁面如何查看。如果會話存在或不查看或不查看該頁面給用戶 – adasdasd

+0

在創建HTML視圖時,您將必須使用REST API完成所有工作,您需要在$ scope中存儲你的用戶ID,這樣你就可以在將來的事務中通過任何$ http(get,post,delete或put)將它用於你的數據庫。 因此,要檢查用戶會話是否已經存在,您可以在Angular中使用會話,但與您同步Spring可以使用您可能具有的任何REST方法。 您可以在[此](https://medium.com/opinionated-angularjs/techniques-for-authentication-in-angularjs-applications-7bbf0346acec#.vrr17998r)鏈接中查看更多信息 – ZetaPR

2

我認爲最好的方法是在你的AngularJS控制器創建方法和然後調用它。

Java代碼:

@RequestMapping(value = "/menu/get", method = RequestMethod.GET, headers="Accept=*/*") 
public @ResponseBody Empleado showMenu(HttpSession session) { 
    Empleado empleado = (Empleado) session.getAttribute("empleado"); 

    return empleado; 
} 

AngularJS代碼:

angular.module('myModule') 
    .controller('myMenuController', ['$scope', '$http' 
     function($scope, $http){ 

     getEmpleadoInfo = function() { 
      $http.get(myContextPage + '/menu/get') 
       .then(function(data) { 
        $scope.empleado = data; 
       }) 
     } 

     getEmpleadoInfo(); 

    }]); 

這樣,當加載頁面時,對象將在範圍加載。