#java #spring #spring-boot #spring-security
Вопрос:
Я только начал изучать весеннюю безопасность и столкнулся с одной проблемой. После ввода учетных данных в форме входа в систему пользователь перенаправляется обратно на страницу входа.
Вот конфигурация безопасности.java, которую я настроил:
@Configuration
@EnableWebSecurity
public class SpringSecurityConfiguration extends WebSecurityConfigurerAdapter {
private final PasswordEncoder passwordEncoder;
private final UserDetailsService userDetailsService;
public SpringSecurityConfiguration(PasswordEncoder passwordEncoder,
@Qualifier("userDetailsServiceImpl") UserDetailsService userDetailsService) {
this.passwordEncoder = passwordEncoder;
this.userDetailsService = userDetailsService;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic().disable()
.csrf().disable()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests().antMatchers("/registration").permitAll()
.and()
.authorizeRequests().anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.usernameParameter("login")
.passwordParameter("password")
.permitAll()
.defaultSuccessUrl("/main")
.and()
.logout()
.logoutSuccessUrl("/login")
;
}
@Override
protected void configure(AuthenticationManagerBuilder auth) {
auth.authenticationProvider(daoAuthenticationProvider());
}
@Bean
protected DaoAuthenticationProvider daoAuthenticationProvider() {
DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();
daoAuthenticationProvider.setPasswordEncoder(passwordEncoder);
daoAuthenticationProvider.setUserDetailsService(userDetailsService);
return daoAuthenticationProvider;
}
}
Я получаю этот ответ в браузере:
Это метод в контроллере, который возвращает форму входа в систему:
@GetMapping("/login")
public String showLoginForm(Model model) {
model.addAttribute("user",new LoginForm());
return "login";
}
Форма для входа в систему:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<form th:action="@{/login}" th:object="${user}" method="post">
<div>
<label>
<input type="text" th:field="*{login}" placeholder="Login">
</label>
</div>
<div>
<label>
<input type="text" th:field="*{password}" placeholder="Password">
</label>
</div>
<button class="primary-button" type="submit">LOGIN</button>
<a th:href="@{/registration}">Add new user</a>
</form>
</body>
</html>
Комментарии:
1. Вы работаете без сохранения состояния, поэтому после проверки подлинности проверка подлинности является lsot (из-за отсутствия состояния), вы будете перенаправлены на
/main
, однако из-за необходимости проверки подлинности вы вернетесь на страницу входа. Вам либо нужна оценка с отслеживанием состояния , либо создайте токен после входа в систему и добавьте аутентификацию на основе токенов, чтобы следующий запрос отправил токен (требуется javascript или файлы cookie).