Spring框架如何检查用户帐户是不是过期?

Posted

技术标签:

【中文标题】Spring框架如何检查用户帐户是不是过期?【英文标题】:How Spring framework checks if the user account is expired?Spring框架如何检查用户帐户是否过期? 【发布时间】:2017-10-29 12:03:41 【问题描述】:

我可以看到这个 html 页面: https://docs.spring.io/spring-security/site/docs/current/apidocs/org/springframework/security/authentication/AccountExpiredException.html

在我的代码中,我使用以下内容:

 try 
providerManager.authenticate(auth);
 catch(LockedException e) 
    // some user exception to throw
 catch(DisabledException e) 
    // some user exception to throw
 catch(AccountExpiredException e) 
    // some user exception to throw

那么 Spring 是如何判断用户账号是否过期的呢?

我必须进行测试,因此我必须使用户帐户过期。这就是为什么。

【问题讨论】:

通过在User 上调用isNotExpired 方法。但是,您为什么还要对此进行测试并抛出单独的异常?感觉就像您正在处理 Spring Security 的异常处理,并向用户公开重要信息(即帐户锁定、过期等),这对于黑客来说又是有价值的信息。 isNotExpired 是 getter 方法。但是将过期变量设置为 TRUE 的 setter 方法在什么条件下将其设置为 TRUE 呢?我只想给用户一个帐户过期的具体原因。除了可能导致黑客入侵的信息之外,没有其他信息。 公开该信息是黑客的信息,他有一个现有的帐户。几天后他可能会再试一次……您可能希望在内部记录该信息,但不要将其公开给最终用户。如何设置,取决于你使用什么,默认是true,并且只设置了enabled 【参考方案1】:

基本上,spring 以http://docs.spring.io/spring-security/site/docs/current/apidocs/org/springframework/security/core/userdetails/UserDetails.html 的身份与用户一起工作。因此,您需要找到将用户实体转换为 UserDetails 的代码。也许您正在使用一些默认机制,例如内存或 JDBC(检查您的 http://docs.spring.io/spring-security/site/docs/current/apidocs/org/springframework/security/config/annotation/web/configuration/WebSecurityConfigurerAdapter.html),在这种情况下,您需要检查此机制的文档/源代码。

【讨论】:

是的,我们有 UserDetails 类。当我们登录用户时,我们将 UserDetails 构造函数设置为 accountNonExpired = TRUE。所以在我们的例子中,它是真实的。是预期的吗? 如果您的系统不支持锁定、禁用或过期的帐户,这是正常的。可能用户实体没有对应的字段以及数据库表。所以所有用户都没有被锁定/禁用/过期。如果要添加它,则需要将相应的属性添加到表中,为用户实体创建字段,使用您的 ORM 读取它,然后将值传递给 UserDetails。 我会说,好吧,Spring 使用了 UserDetails,在我的代码中它被设置为 TRUE。

以上是关于Spring框架如何检查用户帐户是不是过期?的主要内容,如果未能解决你的问题,请参考以下文章

我如何检查用户是不是切换了 iCloud 帐户?

如何检查用户是不是有gmail帐户

Powershell 将用户帐户密码设置为永不过期

如何包括是不是为 Spring Boot 用户身份验证启用用户帐户

使用 Hibernate,我如何检查尝试登录的用户是不是在数据库中有注册帐户?

检查自动更新订阅是不是过期