我尝试使用Spring Security基本授权。当我从角度发出发布请求时,spring无法识别“用户名”和“密码”属性。当我向邮递员发出发帖请求时,它起作用了。我不知道问题出在弹簧配置还是角度要求。
我已经尝试了多种发布请求配置,但没有任何效果。
这是我的春季安全配置:
@Configuration
@EnableWebSecurity
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("a").password("a").roles("*");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().and().
csrf().disable()
.authorizeRequests()
.antMatchers(HttpMethod.OPTIONS,"/**").permitAll()
.antMatchers("/login").permitAll()
.antMatchers("/users").permitAll()
.anyRequest().authenticated()
.and().formLogin().and().httpBasic();
}
我最新的角度发布请求:
constructor(private httpClient: HttpClient) {}
handleLogin(user: UserDto) {
let headers = new HttpHeaders({
'Authorization': 'Basic ' + btoa('a' + ':' + 'a'),
'X-Requested-With': 'XMLHttpRequest'
});
this.httpClient
.post("//localhost:8080/login" ,{}, {headers}).subscribe(x=> {console.log(x)});
}
这是Spring安全检查凭证和结果为空的地方
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
if (this.postOnly && !request.getMethod().equals("POST")) {
throw new AuthenticationServiceException("Authentication method not supported: " + request.getMethod());
} else {
String username = this.obtainUsername(request); //null
String password = this.obtainPassword(request); //null
当我从邮递员授权工作中发出发帖请求时,我希望有人可以帮助我解决与角度请求有关的seme结果。
-----------编辑---------- 如评论中所建议,我尝试了这个并且仍然是同样的问题。
let options = { headers: headers };
this.httpClient
.post("//localhost:8080/login", {}, options).subscribe(x => { console.log(x) });
谢谢
答案 0 :(得分:0)
对于HttpClient.post,第二个参数应该是请求正文,然后是选项。
也许添加
let options = { headers: headers };
this.httpClient.post(url, null, options);
https://v4.angular.io/api/common/http/HttpClient#post
Angular的4.3之前版本具有一个旧的http api,其中包含一组不同的参数,可能会使您感到困惑。