grails Acegi:如何检查过期密码

grails Acegi:如何检查过期密码,grails,login,passwords,spring-security,Grails,Login,Passwords,Spring Security,这是我们的一个分支。因为这个问题的最初目的是别的 我正在寻找检查密码是否过期的最简单方法。如果密码超过N天,则密码将过期,其中N是存储在另一个表中的值 我的用户类如下所示: Security config: loginUserDomainClass = "com.emp.app.user.User" /** * User domain class. */ class User { static transients = ['pass','passwordExpired','crede

这是我们的一个分支。因为这个问题的最初目的是别的

我正在寻找检查密码是否过期的最简单方法。如果密码超过N天,则密码将过期,其中N是存储在另一个表中的值

我的用户类如下所示:

Security config:
loginUserDomainClass = "com.emp.app.user.User"

/**
 * User domain class.
 */
class User {
   static transients = ['pass','passwordExpired','credentialsNonExpired']
   static hasMany = [authorities: Role]
   static belongsTo = Role
   /** Username */
   String username
   /** User Real Name*/
   String userRealName
   /** MD5 Password */
   String passwd
   /** enabled */
   boolean enabled

   String email
   boolean emailShow

   /** description */
   String description = ''

   /** plain password to create a MD5 password */
   String pass = '[secret]'

   static constraints = {
      username(blank: false, unique: true)
      userRealName(blank: false)
      passwd(blank: false)
      enabled()
   }

   public boolean isCredentialsNonExpired() {

          //Check for the N value
         return true;
   }
}
我添加了isCredentialsNonExpired,希望在检查凭据时在登录时调用它,但它不是。有没有办法做到这一点

我对此很困惑,不确定是否必须编写自定义代码来替换某些acegi功能或其他什么


提前感谢。

我认为正确的方法是让您的身份验证提供商决定密码是否过期。

我认为正确的方法是让您的身份验证提供商决定密码是否过期。

我会在自定义用户详细信息服务中执行此操作-请参阅

从数据库加载用户并填充UserDetails时,您有机会设置凭据expired=true和/或enabled、accountLocked和accountExpired


您可能会通过向用户域类添加Date lastPasswordUpdate字段来实现这一点,该字段在用户每次更改密码时都会更新。将该日期与今天的日期进行比较,如果超过N天前,则将其设置为false。

我会在自定义UserDetails服务中执行此操作-请参阅

从数据库加载用户并填充UserDetails时,您有机会设置凭据expired=true和/或enabled、accountLocked和accountExpired


您可能会通过向用户域类添加Date lastPasswordUpdate字段来实现这一点,该字段在用户每次更改密码时都会更新。将该日期与今天的日期进行比较,如果超过N天前,则将其设置为false。

已使其正常工作,谢谢。现在了解如何重定向到自定义页面。使其正常工作,谢谢。现在了解如何重定向到自定义页面。