Это довольно старый поток, но если вы используете относительно актуальный пакет "spring-boot-starter-security", вот как я это сделал:
Я установил свой AuthenticationFailureHandler следующим образом:
SimpleUrlAuthenticationFailureHandler handler = new SimpleUrlAuthenticationFailureHandler("/my-error-url");
handler.setUseForward(true);
Это установит последнее исключение в запросе:
//from SimpleUrlAuthenticationFailureHandler source
request.setAttribute("SPRING_SECURITY_LAST_EXCEPTION", exception);
Тогда из моего контроллера я могу получить неверное имя пользователя:
RequestMapping("/impersonate-error")
public String impersonateErrorPage(Map<String, Object> model, HttpServletRequest request) {
AuthenticationException ex = (AuthenticationException)request.getAttribute("SPRING_SECURITY_LAST_EXCEPTION");
if(ex != null) {
logger.debug("Impersonate message: " + ex.getMessage());
model.put("badName", ex.getMessage());
}
return "impersonate-error";
}