Grails Acegi: Как проверить срок действия пароля - PullRequest
1 голос
/ 05 октября 2010

Это ветка от этого вопроса . Разветвленная, потому что первоначальная цель этого вопроса была в другом.

Я ищу самый простой способ проверить, не истек ли срок действия пароля. Срок действия пароля истекает, если он старше N дней, где N - это значение, хранящееся в другой таблице.

Мой класс User выглядит следующим образом:

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 или что-то в этом роде.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 06 октября 2010

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

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

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

1 голос
/ 05 октября 2010

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

...