2010-10-05 3 views
1

Это филиал от this question. Разветвлено, потому что первоначальная цель этого вопроса была чем-то другим.grails Acegi: Как проверить истекший пароль

Я ищу самый простой способ проверить, не истек ли пароль. Срок действия пароля истекает, если его возраст превышает 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 или что-то еще.

Заранее благодарен.

ответ

3

Я хотел бы сделать это в пользовательском UserDetailsService - см http://www.grails.org/AcegiSecurity+Plugin+-+Custom+UserDetailsService

В то время как вы загружаете пользователь из базы данных и заполнение UserDetails у вас есть возможность установить полномочие истекло = истину (и/или включены, accountLocked и accountExpired).

Возможно, вы сделаете это, добавив поле «Дата последнего действия» в класс «Пользовательский домен», который обновляется каждый раз, когда пользователь изменяет пароль. Сравните эту дату с сегодняшним, и если она больше, чем N дней назад, установите ее в значение false.

+0

Получил работу, спасибо. Теперь, чтобы узнать, как перенаправить на пользовательскую страницу. – Tom

1

I думаю, правильный способ сделать это, чтобы поставщик проверки подлинности решал, истек ли срок действия пароля.

+0

Так что я должен был бы написать обычай? – Tom

+0

@tom, я так думаю. – hvgotcodes

Смежные вопросы