Как я могу получить ошибку аутентификации пользователя (неверное имя пользователя / пароль, отключенная / заблокированная / просроченная учетная запись) в @Controller и добавить эту ошибку в атрибуты модели для отображения в шаблоне Thymeleaf? Я обрабатываю это в WebSecurityConfigurerAdapter
http
.formLogin()
.loginPage("/login")
.failureUrl("/login/error")
и обработать в методе @Controller
@RequestMapping("/login/error")
public String loginError(Model model) {
model.addAttribute("loginError", true);
return "login";
}
но какой параметр метода я должен использовать для этого? Это возможно с HttpSession (он содержит объект исключения аутентификации), но я не думаю, что это хорошая идея.
Вы можете использовать класс ModelAndView и добавить метод Object (), как показано ниже.
@RequestMapping("/login/error")
public ModelAndView loginError(Model model) {
ModelAndView mav = new ModelAndView("login");
model.addAttribute("loginError", true);
mav.addObject("errorString","User name or password is wrong")
return mav;
}
В Jsp вы можете написать такую ошибку: $ {error String}
но вопрос: как получить ошибку в этом методе? Что за ошибка?
это полностью зависит от выбранного вами механизма аутентификации. Будет ли это LDAP, база данных или файл?
@VadymBorys, какую аутентификацию вы используете? Я надеюсь, что ваша аутентификация произойдет на уровне обслуживания, и вы возвращаете статус в виде строки или объекта?
Вы можете распечатать сообщение об ошибке аутентификации со следующим кодом Thymeleaf:
<p data-th-if = "${loginError == true && session.SPRING_SECURITY_LAST_EXCEPTION != null}"
data-th-text = "${session.SPRING_SECURITY_LAST_EXCEPTION.message}">
Bad credentials.
</p>
Никакого дополнительного кода в контроллере не требуется.
посмотрите в это -> stackoverflow.com/questions/12731144/…