GrailsアプリケーションとSpring SecurityでMongoDBを使いたかったのです。 s2-quickstart
コマンドを使用してUserクラスとRoleクラスの両方を生成しました。私はid
プロパティを、多くのブログ記事で言うように、ObjectId
タイプのすべてのクラスに追加しました。Spring SecurityとMongoDBの併用
それは作業を行いますが、一つの方法は私に少し気:
// SecUser.groovy (generated by s2-quickstart)
def beforeUpdate() {
if (this.isDirty('password')) {
encodePassword()
}
}
MongoDBの環境では使用できないように思わisDirty()
方法。これは、Hibernateを使ってうまく動作します。これはhttp://jira.grails.org/browse/GPMONGODB-114の下に提出されたバグです
この方法を回避する方法はありますか?私が理解する限り、パスワードが変更されたかどうかを確認してから再度エンコードします。
これを手動で行うことはできませんか?たとえば、ユーザープロフィールのページにパスワードフィールドが含まれている場合、保存時に再度エンコードするだけですか?
私はSpring SecurityとMongoDBの両方を一緒に使いたいと思っています。私はこの方法が私を止めないと確信しています。 ;)
'UserDetailsService'は何ですか? GitHubのサンプルアプリケーションでこのクラスを見ましたが、生成されませんでした。これはちょうど良いことですか?私は現在、それを使用することでどんな利点も見ません。私は 'before ...()'メソッドを投げ捨て、新しい 'User'オブジェクトを作成し、' User'オブジェクト自体ではなく、手作業で塩漬け/ハッシュされたパスワードを設定しました。魅力のように動作します。 GrailsのプラグインやSpring Security自体では、明示的に設定する必要はありませんが、自動的に多くのことが行われると思います。 –
'isDirty()'はHibernateでしかサポートされていないので、GrailsとMongoDBを使う唯一の方法は、ユーザの保存や更新時にパスワードハッシュを実装することだけです。しかし、あまり傷つかない –