Spring Security и Angular 7. Вход в систему POST запрос - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу войти в свое бэкэнд-приложение (Spring Boot and Security), но у меня проблема с входом в приложение Angular.Когда я делаю запрос от Почтальона, все работает.У меня есть собственная реализация SimpleUrlAuthenticationFailureHandler, и когда я отлаживаю это, я вижу, что в запросе от Angular у меня нет никаких параметров.(Я проверяю это в методе onAuthenticationFailure, вызывая System.out.println(request.getParameter("username"));).Когда я делаю запрос от Почтальона, я вижу логин, конечно, я установил неправильный логин.

Вот мой код из сервиса аутентификации внешнего интерфейса.

export class SecurityService {

 private baseUrl = environment.baseUrl;

 constructor(private http: HttpClient){

 }

login(){
console.log(this.baseUrl);

let username = 'user';
let password = 'userPass';

let body = JSON.stringify({ username: username, password: password })
let httpParams = new HttpParams();
httpParams = httpParams.append('username', username).append('password', password);
let headers = new HttpHeaders({ 'Content-Type': 'application/json' });


this.http.post<any>(this.baseUrl + "login", {body, headers})
  .subscribe(value => console.log(value));

}

}

Я не знаю, как построить этот запрос в angular, и я все еще поднимаю статус 401 после запроса.Я не вижу никакой помощи в учебниках от Google или Youtube.

enter image description here РЕДАКТИРОВАТЬ: Config Security

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
private RestAuthenticationEntryPoint restAuthenticationEntryPoint;

@Autowired
private SuccessHandler successHandler;

@Autowired
private FailureLoginHandler failureLoginHandler;

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication()
            .withUser("admin").password(passwordEncoder().encode("adminPass")).roles("ADMIN")
            .and()
            .withUser("user").password(passwordEncoder().encode("userPass")).roles("USER");

}

@Bean
public PasswordEncoder passwordEncoder(){
    return new BCryptPasswordEncoder();
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .csrf().disable()
            .exceptionHandling()
            .authenticationEntryPoint(restAuthenticationEntryPoint)
            .and()
            .authorizeRequests()
            .antMatchers("/api/foo").authenticated()
            .antMatchers("api/admin/**").hasRole("ADMIN")
            .antMatchers("/login").permitAll()
            .and()
            .formLogin()
            .successHandler(successHandler)
            .failureHandler(failureLoginHandler)
            .and()
            .logout();
}


}

Ответы [ 2 ]

0 голосов
/ 08 августа 2019

Я немного опаздываю со своим ответом.

Если вы можете, я предлагаю отказаться от пути loginForm для Oauth2 / Oidc (более безопасный, может быть без состояний, ориентированный на облако) или базовой аутентификации (готов идти!).Если вы выберете Basic Auth, следуйте официальному учебному пособию весной, и все пройдет гладко https://spring.io/guides/tutorials/spring-security-and-angular-js/

В случае, если вам нужно поддерживать LoginForm, мы нашли 2 угловых способа передачи данных:

Первый (брутальный)

return this.http.post<any>(<my_login_url>, {}, {
    params: new HttpParams({
      fromObject: {
        username: form.username,
        password: form.passowrd
        submit: 'login'
      }
    })
  })

Второй (чистый и гладкий)

const loginForm: FormData = new FormData();
loginForm.append('username', form.username);
loginForm.append('password', form.password);
loginForm.append('submit', 'login');
return this.http.post(<my_login_url>, loginForm)
0 голосов
/ 19 февраля 2019

Вы можете пойти с этим блогом , он прекрасно поможет вам в аутентификации с помощью Spring Security и Angular.Я также использовал это в своем проекте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...