grails Acegi:如何检查过期密码
这是我们的一个分支。因为这个问题的最初目的是别的 我正在寻找检查密码是否过期的最简单方法。如果密码超过N天,则密码将过期,其中N是存储在另一个表中的值 我的用户类如下所示: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
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。已使其正常工作,谢谢。现在了解如何重定向到自定义页面。使其正常工作,谢谢。现在了解如何重定向到自定义页面。