【问题标题】:grails Acegi: How to check for expired passwordgrails Acegi:如何检查过期密码
【发布时间】:2011-04-21 11:46:23
【问题描述】:

这是this question 的一个分支。扩展,因为该问题的最初目的是别的。

我正在寻找检查密码是否过期的最简单方法。如果密码超过 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 功能或什么。

提前致谢。

【问题讨论】:

    标签: grails login passwords spring-security


    【解决方案1】:

    我会在自定义 UserDetailsS​​ervice 中执行此操作 - 请参阅 http://www.grails.org/AcegiSecurity+Plugin+-+Custom+UserDetailsService

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

    您可能会通过将“日期 lastPasswordUpdate”字段添加到每次用户更改密码时都会更新的用户域类来执行此操作。将该日期与今天进行比较,如果超过 N 天,则将其设置为 false。

    【讨论】:

    • 搞定了,谢谢。现在来了解如何重定向到自定义页面。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2010-12-11
      • 2011-04-21
      • 2010-12-01
      • 2018-08-01
      • 2014-12-08
      • 2011-01-03
      • 2015-07-09
      • 1970-01-01
      • 2011-04-24
      相关资源
      最近更新 更多