Spring Security Authentication不适用于AngularJS(302)

时间:2016-05-01 03:40:11

标签: angularjs authentication login spring-security

我使用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'

为什么服务器没有收到请求?

0 个答案:

没有答案