Я пытаюсь аутентифицировать реагирующее приложение с помощью API для отдыха, созданного с помощью весенней загрузки и настроенного с помощью весенней безопасности.

В настоящее время я получаю ошибку 302 даже с правильными учетными данными пользователя.

Является ли "/login" правильным URL-адресом по умолчанию для информации аутентификации после запроса?
Кроме того, мне просто нужно добавить токен csrf в заголовок и имя пользователя/пароль в тело почтового запроса?

Конфигурация безопасности выглядит следующим образом:

@Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .userDetailsService(this.userDetailsService)
            .passwordEncoder(User.PASSWORD_ENCODER);

    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        final CookieCsrfTokenRepository tokenRepository = new CookieCsrfTokenRepository();

        http
            .authorizeRequests()
            .antMatchers("/")
            .permitAll()
            .antMatchers("/api/**").authenticated()
            .and()
            .formLogin()
            .permitAll()
            .and()
            .httpBasic()
            .and()
            .logout()
            .logoutSuccessUrl("/")
            .and()
            .csrf()
            .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
    }

Мой пост выглядит так:

...
const data = { 
            userName: this.state.userName,
            password: this.state.password
        };

        fetch('http://localhost:8080/login', {
            method: 'POST',
            headers: {
                'X-XSRF-TOKEN': cookies.get("XSRF-TOKEN")},
            body: JSON.stringify(data),
        }).then(response => {
...

Заранее спасибо

1
brainmuncher 30 Мар 2020 в 02:37
Удаление httpBasic противоречит formLogin, тогда я бы рекомендовал использовать простую html-форму для входа в систему из-за поведения Spring Security, у него есть конфигурация для перенаправления после входа в систему: .loginPage("/login").permitAll().loginProcessingUrl(" /loginCheck").usernameParameter("имя пользователя").passwordParameter("пароль").defaultSuccessUrl("/welcome")
 – 
peterzinho16
30 Мар 2020 в 06:52

1 ответ

Вы должны указать страницу login.html в методе настройки, подобном этому.

.formLogin()
    .loginPage("/login.html").permitAll();

Перейдите по этой ссылке.

Надеюсь, это решит вашу проблему :)

0
Chamith Madusanka 30 Мар 2020 в 06:56