Редактировать: разрешено. Посмотреть мой комментарий после этого сообщенияSpring AuthenticationFailureHandler и WebSecurityConfigurerAdapter loginPage()
В настоящее время я реализую веб-приложение с Spring-Security. Я внедрил пользовательский код AuthenticationFailureHandler
, который проверяет, слишком ли часто пытался войти в систему с неправильными учетными данными (и блокирует его для серверных минут). Но нормальные неудачные логины должны перенаправлять пользователя на страницу входа с ошибкой параметра (/login?error
). На этой странице отображается сообщение об ошибке, как «Пароль, который вы набрали в ошиблась»
AutenticationFailureHandler
выглядит следующим образом (без uninteressting Linse кода)
public class CustomAuthenticationHandler implements AuthenticationFailureHandler {
// Some variables
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
// some logic here..
request.setAttribute("param", "error");
response.sendRedirect("/login?error");
}
Мой класс WebApplicationSecurity выглядит следующим образом:
@Configuration
@EnableWebMvcSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
CustomAuthenticationHandler customAuthenticationHandler;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.formLogin()
.loginPage("/login")
.permitAll()
.failureHandler(customAuthenticationHandler)
.and()
.logout()
.permitAll();
http.authorizeRequests()
.antMatchers("/css/**", "/img/**", "/js/**")
.permitAll()
.anyRequest()
.authenticated();
http
.csrf()
.disable();
}
@Bean
CustomAuthenticationHandler authenticationHandler() {
return new CustomAuthenticationHandler();
}
@Configuration
protected static class AuthenticationConfiguration extends
GlobalAuthenticationConfigurerAdapter {
@Override
public void init(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("*******")
.password("*******")
.roles("USER");
}
}
}
Проблема в том, что AuthenticationFailureHandler
перенаправляет на /login?error
, но (я не знаю, почему) другой перенаправление делается до /login
.
Помогите мне решить мою проблему?
ли вы случайно вызвать super.onAuthenticationFailure в любой момент? Может ли Spring автоматически делать это по какой-то причине? – kaqqao
Ну, я решил это, добавив «/ login **» в 'http.authorizeRequests(). AntMatchers ("/css/** ","/img/** ","/js/** ")' – smsnheck
О, так логин сам (с параметрами) не был доступен ... Самая старая ошибка в книге:/ – kaqqao