【问题标题】:Spring Security. Special differences - accountNonExpired vs credentialsNonExpired vs accountNonLocked春季安全。特殊差异 - accountNonExpired vs credentialsNonExpired vs accountNonLocked
【发布时间】:2021-06-09 02:10:45
【问题描述】:
UserDetails 具有三个参数 accountNonExpired、credentialsNonExpired 和 accountNonLocked。
我不太明白他们在行动上的差异。如果设置为 false,所有三个参数都会阻止帐户。
那么为什么需要它们,如果它们执行相同的操作,我不太明白。毕竟,您可以保留一个参数,例如 accountNonLocked,这样就足够了。
请给我解释一下,否则我有些不明白。
【问题讨论】:
标签:
spring
spring-mvc
spring-security
【解决方案1】:
这只是一组单独的阻止帐户的原因。每个参数都有自己的例外:
accountNonLocked | LockedException
credentialsNonExpired | CredentialsExpiredException
accountNonExpired | AccountExpiredException
如果您编写自己的异常处理程序,则可以轻松自定义错误消息/代码逻辑。例如:
@PostMapping("/login")
public String login() {
try{
loginService.login();
return "redirect:/main-page";
}
catch (CredentialsExpiredException e) {
return "redirect:/change-credentials-page";
}
catch (LockedException e) {
return "redirect:/write-to-admin-page";
}
... etc
}
注意:这可能不是处理身份验证异常的正确方法,也不是处理登录逻辑的好方法