我正在使用Grails
插件运行Spring Security
。在客户端,我正在运行AngularJS
我想要验证用户的位置。理想情况下,我想使用Angular中的$http
模块,但显然它不遵循服务器发送的Location:
标头。
正在发生的事情是Spring Security返回302 Moved temporarily
,应该像jQuery
那样自动查询/跟踪。
以下jQuery
代码段正常工作,并根据GET
响应标头创建新的Location: "http://agrarius.nl/login/ajaxSuccess"
请求:
$.ajax({
url: serverUri+'/j_spring_security_check?ajax=true',
data: data,
method: 'POST'
})
AngularJS
方法似乎没有做任何事情,只是退出:
// Setup Config
var data = {
j_username: $scope.user.email,
j_password: $scope.user.password
}
var config = {
method: 'POST',
url: serverUri+'/j_spring_security_check?ajax=true',
data: $.param(data),
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
};
// Dispatch HTTP Request
$http(config)
.success(function(data, status, headers, config) {
if (data.status) {
// successful login
User.isLogged = true;
User.username = data.username;
}
else {
User.isLogged = false;
User.username = '';
}
$scope.loggingIn = false;
})
.error(function(data, status, headers, config) {
$scope.loggingIn = false;
User.isLogged = false;
User.username = '';
if (status == 0) {
// Request got cancelled
console.log("Request got cancelled.");
return;
}
});
知道它为什么没有;这样的功能?而使用jQuery是否“安全”? :)
答案 0 :(得分:1)
您可以尝试以下操作:
$http.post(serverUri+'/j_spring_security_check?ajax=true', $.param(data))
.then(function (response){
var location = response.headers('Location');
return $http.get(location);
})
.then(function (response) {
if (response.data.status)
{
// successful login
User.isLogged = true;
User.username = response.data.username;
}
else
{
User.isLogged = false;
User.username = '';
}
$scope.loggingIn = false;
});