Застрял на экране входа в систему с помощью spring security

#java #spring #spring-security #axios

#java #spring #spring-безопасность #аксиос

Вопрос:

В настоящее время я использую spring security для аутентификации моего экрана входа в систему. Он работает, как и ожидалось, для недопустимых логинов (неправильная комбинация имени пользователя и пароля). Когда я ввожу правильное имя пользователя и пароль, я получаю сообщение об успешном завершении, но перенаправляюсь обратно на экран входа в систему. Я использую axios на интерфейсе, чтобы перенаправить меня на экран входа в систему после получения хорошего запроса. Я не хочу загружать весь код, который я использую, но я загружу то, что считаю необходимым для решения проблемы.

SecurityConfiguration.java

 @EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    UserDetailsService userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        http.authorizeRequests()
                .antMatchers("/login", "/signup").permitAll()
                .antMatchers("/home/**").authenticated().anyRequest().permitAll()
                .and().formLogin()
                .loginPage("/login");
    }

    @Bean
    public PasswordEncoder getPasswordEncoder() {
        return NoOpPasswordEncoder.getInstance();
    }
}
 

код javascript на интерфейсе

 getRequest(){
                console.log("HERE");
                axios({
                    method: 'post',
                    url: 'http://localhost:8080/api/login',
                    data: {
                        username: this.username,
                        password: this.password
                    }
                })
                .then(res => {
                    alert("Success, Authenticiation processed!");
                    window.location = "http://localhost:8080/home";
                })
                .catch(err => {
                    this.status = "ERROR";
                    console.log("error")
                    
                });
            }
 

Я на 100% уверен, что это как-то связано с конфигурацией безопасности, так как я отладил свой контроллер, и, похоже, с ним все в порядке. Заранее спасибо!

Комментарии:

1. Я подозреваю, что проблема связана с тем, что вы обходите механизм входа в систему Spring Security и создаете свой собственный с помощью контроллера. Что вам нужно сделать, так это отправить сообщение в обычную конечную точку входа с FormData именем пользователя и паролем. Таким образом, Spring Security обработает вход в систему.

2. Это может сработать, единственная проблема в том, что я хочу использовать свой собственный HTML-код для оформления экрана входа в систему. Я видел, как это делалось раньше, я просто не знаю, чего мне не хватает.

3. Вы читали мой комментарий? Просто отправьте сообщение /login вместо /api/login и используйте formdata вместо json. Это единственное, что вам нужно изменить.