#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. Это единственное, что вам нужно изменить.