繁体   English   中英

Spring Security AngularJS登录

[英]Spring Security AngularJS Login

我有一个Spring Boot应用程序,并为其配置了spring安全性,它使用具有简单AngularJS表单的自定义登录页面,并且我尝试通过它进行身份验证,但未成功。 在我的CurrentUserDetailsS​​ervice loadUserByUsername(String param)上,参数param每次都为null,有人可以帮助我吗? 我想念什么吗?

这是我的表格:

<form role="form" action="" name="form" class="">
        <fieldset class="pure-group">
            <legend>Log In</legend>
            <div class="form-group">
                <label for="username">Username:</label> 
                <input type="text" class="form-control" id="username" name="username" ng-model="credentials.username"/>
            </div>
            <div class="form-group">
                <label for="password">Password:</label> 
                <input type="password"  class="form-control" id="password" name="password" ng-model="credentials.password"/>
            </div>
            <button ng-click="onLogin($event)" type="submit" class="btn btn-primary">Submit</button>
        </fieldset>
    </form>

这是我的js:

$scope.onLogin = function($event){
     $event.preventDefault();
     $http({
         method: 'POST',
         url:'/login',
         data: $scope.credentials
     })  
}   

这是我的安全配置:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
        .authorizeRequests()
        .antMatchers("/newuser","/create").permitAll()
        .antMatchers("/css/**").permitAll()
        .antMatchers("/js/**").permitAll()
        .antMatchers("/**").hasRole("USER").anyRequest().authenticated()
        .and()
        .formLogin()
        .loginProcessingUrl("/login")
        .usernameParameter("username")
        .passwordParameter("password")
        .defaultSuccessUrl("/index.html")
        .loginPage("/loginpage.html")
        .and()
        .httpBasic()
        .and()
        .logout()
        .logoutUrl("/logout")
        .logoutSuccessUrl("/loginpage.html")
        .permitAll()
        .and()
        .csrf().csrfTokenRepository(csrfTokenRepository())
        .and()
        .addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class);

    }

这是我每次都得到的例外:

org.springframework.security.authentication.InternalAuthenticationServiceException: Cannot pass null or empty values to constructor

还想提到通过我的POST请求发送的用户名和密码

在此处输入图片说明

我尝试使用j_username和j_password,但是什么也没有。

尝试像这样构建您的帖子数据:

$scope.onLogin = function($event){
    $event.preventDefault();
    var data = 'username=' + encodeURIComponent($scope.credentials.username) +
        '&password=' + encodeURIComponent($scope.credentials.password) +
        '&submit=Login';
    $http.post('/login', data, {
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        }
    });
}

这样,它将是预期的Content-Type,并且如果我没有记错的话,它将与表单正常发布的方式匹配。 对不起,我没有详细说明。

似乎您将数据发布为JSON而不是form_data(单个参数用户名和密码)。 请查看此答案以获取详细信息:

如何在AngularJS中使用$ http发布urlencode表单数据?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM