我已經成功地設置了一個Spring Security項目,它在用戶登錄時對用戶進行身份驗證。但是,在他登錄後,我想要檢索此用戶對象(它位於Spring安全性)通過AngularJS的每個控制器功能中的Rest控制器。AngularJS從控制器上檢索每個請求的用戶對象
爲了澄清,我怎樣才能在每個控制器中調用以下方法來檢索用戶對象?
@RequestMapping(value = "/getLoggedInUser", method = RequestMethod.GET, headers = "Accept=application/json")
public User getLoggedInUser() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (!(auth instanceof AnonymousAuthenticationToken)) {
User user = (User) SecurityContextHolder.getContext().getAuthentication()
.getPrincipal();
return user;
}
return null;
}
我所做的是以下幾點:
$http.get(urlBase+'/getLoggedInUser').
success(function(data) {
$scope.users = data;
console.log("The logged in user is: " + data.firstname);
})
這工作,並將其打印出名字,但我得到一些奇怪的行爲,當我把上面的方法內的另一個$ HTTP GET方法。在每個angularjs控制器的開始處添加此函數以獲取此用戶對象並檢查它是否爲null或設置(所以我可以使用它進行一些邏輯處理),是否有更好的選項或可能性?
***********更新*********** 在pankajparkar的建議後,我現在能夠簡單地檢索用戶對象。我把get方法在應用工廠直接作爲這樣的:
myApp.factory('accountService', function($http) {
return {
getUser: function() {
return $http.get(urlBase+'/getLoggedInUser');
}
};
});
而且從每一個控制器,我可以考績了AccountService方法並執行以下操作:
var handleSuccess = function(user, status) {
$scope.user = user;
};
accountService.getUser().success(handleSuccess);
現在這工作正常,我可以像這樣獲取每個控制器中的數據。這個可以嗎?或者它可以比這更好一點?
你需要使用角度http攔截器 –
你在哪裏定義** datax **。這是一個錯字? – Reena
@Reena對不起,這是我在編輯它的帖子中的錯誤。 – Moody