私はgrailsのレガシープロジェクトに取り組んでいます。User というドメイン クラスが存在します。パスワード、ユーザー名、役割などが含まれます。
このプロジェクトでは、ロール管理に Spring Security を使用しています。資格情報の有効期限を追加したい (ユーザーにパスワードの更新を強制する)。
User クラスを変更しました。UserDetails インターフェイスを実装していません。
ただし、サーバーを起動すると、このエラーが発生します>
org.springframework.beans.factory.BeanCreationException: 'messageSource' という名前の Bean の作成中にエラーが発生しました: Bean の初期化に失敗しました。ネストされた例外は org.springframework.beans.factory.BeanCreationException:
「transactionManager」という名前の Bean の作成中にエラーが発生しました: Bean プロパティ「sessionFactory」の設定中に、Bean「sessionFactory」への参照を解決できません。ネストされた例外は org.springframework.beans.factory.BeanCreationException:
「sessionFactory」という名前の Bean の作成中にエラーが発生しました: init メソッドの呼び出しに失敗しました。ネストされた例外は org.hibernate.PropertyNotFoundException:
クラス com.company.app.user.User でプロパティ accountNonExpired のセッターが見つかりませんでした
Bean を登録する必要がありますか? インターフェイスはセッター メソッドを要求しないため、このエラーは非常に紛らわしいと思います。
アップデート
さらに調査した後、次のように見える SecurityConfig.groovy に遭遇しました( AcegiSecurity Plugin ):
security {
// see DefaultSecurityConfig.groovy for all settable/overridable properties
active = true
loginUserDomainClass = "User"
authorityDomainClass = "Role"
....
}
私の 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() {
return true;
}
}
このクラスのパスワードの有効期限が切れるかどうかを確認するメソッドを追加しました(isCredentialsNonExpired)
。ログイン時にこのメソッドを実行する必要があります。今のところ、そうではありません。
だから、それが私が取るべきAcegiのアプローチのようです. 何かご意見は?Acegi が Spring Security を使用していることは私の理解ですよね?