Spring Security не может видеть учетные данные, переданные Angular - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь использовать базовую авторизацию Spring Security.Когда я делаю почтовый запрос от angular, Spring не может распознать свойства 'username' и 'password'.Когда я делаю почтовый запрос от почтальона, это работает.Я не знаю, связана ли проблема с конфигурацией пружины или угловым запросом.

Я пробовал много конфигураций почтового запроса, но ничего не работает.

Это моя конфигурация безопасности пружины:

@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)});
  }

Это место, где учетные данные и результат проверки безопасности весной равны нулю

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

Когда я делаю почтовый запрос от почтальонаАвторизация работает, я надеюсь, что кто-то может помочь мне с полученным результатом с помощью запроса anglar.

----------- РЕДАКТИРОВАТЬ ---------- Как предлагается в комментарии, япробовал эту и ту же проблему.

let options = { headers: headers };
this.httpClient
  .post("//localhost:8080/login", {}, options).subscribe(x => { console.log(x) });

Спасибо

1 Ответ

0 голосов
/ 14 мая 2019

В 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 с другим набором параметров, которые могут вас смущать.

...