我使用Spring Security实现了LDAP身份验证。使用默认的formLogin进行测试,它可以正常工作。这是我使用Spring Boot的安全配置:
protected void configure(HttpSecurity http) throws Exception {
http
.addFilterBefore(new CORSFilter(), ChannelProcessingFilter.class)
.csrf().disable()
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.formLogin()
.loginPage("/login");
}
现在我想使用AngularJS登录。基于此post,我在AngularJS中编写了以下服务和控制器,以向Spring Security发布用户名和密码:
//service.js
authApp.factory("loginFactory", function ($http) {
return{
login: function(username, password) {
var data = "username="+username+"&password="+password+"&submit=Login";
return $http({
method: 'POST',
url: 'http://localhost:8080/login',
data: data,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
}
});
}
}
});
//controller
authApp.controller('LoginCtrl', ['$scope', '$location', 'loginFactory', function($scope, $location, loginFactory){
$scope.authenticate = function() {
loginFactory.login($scope.username, $scope.password)
.then(function(response) {
console.log(response);
$location.path('/home');
}, function errorCallBack(response) {
console.log(response);
});
}
}]);
当我调试它时,它会转到errorCallBack
函数。但是,响应似乎为空,因为它在控制台中显示Object {data: null, status: 0, config: Object, statusText: ""}
。当我看到"网络" Chrome中的标签,有一堆302用于登录。
检查服务器端日志(在Spring Tool Suite中启动应用程序作为Spring Boot App),没有任何发布请求的记录。如果我只输入" http://localhost:8080/login"至少在STS控制台中,它会显示已收到的请求。使用以下curl命令发布也有效。
curl -X POST -c cookies -L 'http://localhost:8080/login' -d'username=ddd&password=xxxyyyzzz'
为什么服务器没有收到请求?