【问题标题】:Spring MVC get authentication errorSpring MVC 获取身份验证错误
【发布时间】:2018-10-11 19:42:35
【问题描述】:

如何在@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 是可能的(它包含身份验证异常对象),但我认为这不是一个好主意。

【问题讨论】:

标签: spring spring-mvc spring-security thymeleaf


【解决方案1】:

您可以使用以下 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>

控制器中不需要额外的代码。

【讨论】:

    【解决方案2】:

    您可以使用 ModelAndView 的 calss 和 addObject() 方法,如下所示

    @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 中你可以这样编码 错误:${errorString}

    【讨论】:

    • 但问题是:如何在这种方法中出错?什么样的错误?
    • 它完全取决于您选择的身份验证机制。它是基于 LDAP 还是基于数据库或文件?
    • @VadymBorys,您使用的是哪种身份验证?我希望您的身份验证将在服务层进行,并且您将状态返回为字符串还是对象?
    猜你喜欢
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 2016-10-07
    • 2016-04-30
    相关资源
    最近更新 更多