簡體   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