Spring MVC получает ошибку аутентификации

Как я могу получить ошибку аутентификации пользователя (неверное имя пользователя / пароль, отключенная / заблокированная / просроченная учетная запись) в @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 (он содержит объект исключения аутентификации), но я не думаю, что это хорошая идея.

посмотрите в это -> stackoverflow.com/questions/12731144/…

Adil Khalil 02.05.2018 12:02
0
1
371
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать класс 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}

но вопрос: как получить ошибку в этом методе? Что за ошибка?

Vadym Borys 01.05.2018 21:52

это полностью зависит от выбранного вами механизма аутентификации. Будет ли это LDAP, база данных или файл?

Ragu Venkatesan 02.05.2018 17:55

@VadymBorys, какую аутентификацию вы используете? Я надеюсь, что ваша аутентификация произойдет на уровне обслуживания, и вы возвращаете статус в виде строки или объекта?

Ragu Venkatesan 14.06.2019 23:08
Ответ принят как подходящий

Вы можете распечатать сообщение об ошибке аутентификации со следующим кодом 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>

Никакого дополнительного кода в контроллере не требуется.

Другие вопросы по теме