SpringSecurity プラグインをアプリケーションに統合しています。SecUser
そのために、プラグインをインストールして s2-quickstart スクリプトを実行しました。これにより、 、SecRole
、およびSecUserSecRole
ログイン/ログアウト コントローラーの3 つのドメイン クラスが作成されました。
既存の User ドメイン クラスがあり、それを維持したかったので、User を変更して SecUser を拡張し、User からユーザー名とパスワードの重複フィールドを削除しました。また、tablePerHierarchy false
User と SecUser の両方のマッピング セクションに追加しました。
BootStrap で、起動時に存在する管理者ユーザーを作成しようとしています。そのために、SecRole
権限が ROLE_ADMIN に設定された新しいオブジェクト adminRole を作成します。次に、新しいユーザー オブジェクトを作成し、管理者ロールが含まれているかどうかを確認します。
def springSecurityService
def init {
def adminUser = User.findByUsername('admin') ?: new User(
username:'admin',
password:'adminUser',
userType:'Admin',
enabled:true
).save(failOnError:true)
if (!adminUser.authorities.contains(adminRole))
SecUserSecRole.create adminUser, adminRole, true
}
私の問題は、adminUser が User または SecUser インスタンスであると宣言されているかどうかに関係なく、一時的なインスタンス例外が発生し続けることです。userType には blank:false の制約があるため、User インスタンスの作成時に userType フィールドをコメントアウトすると、null は userType の有効な設定ではないという例外が発生します。それを含めると、一時的なオブジェクトの例外が発生します:オブジェクトは保存されていない一時的なインスタンスを参照しています - フラッシュする前に一時的なインスタンスを保存します: books4africa.SecUser、したがって、すべてのユーザー検証設定に合格していることがわかります。
この状況で有効なユーザー オブジェクトが保存されない原因は何ですか?
編集
この問題の解決策は、既存の dev データベース ファイルを削除し、アプリケーションを再初期化することでした。私の推測では、db と Spring Security の間に元の db と何らかの競合があったため、新しい db でアプリを再起動すると問題が解決しました。
以下の回答はどれも正確な問題を解決していないため、この場合は受け入れませんが、助けてくれてありがとう!