[英]Spring Security AngularJS Login
我有一個Spring Boot應用程序,並為其配置了spring安全性,它使用具有簡單AngularJS表單的自定義登錄頁面,並且我嘗試通過它進行身份驗證,但未成功。 在我的CurrentUserDetailsService 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(單個參數用戶名和密碼)。 請查看此答案以獲取詳細信息:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.