7

Grails で小さな webapp を作成しています。コントローラーの設計と GORM の使用に関するベスト プラクティスについて次の質問があります。

ユーザーオブジェクトをsession.userに保存しています。現在、すべてのアクション メソッドは次のコードで始まり、有効なユーザーがログインしていることと、ユーザー オブジェクトが最新であることを確認します。

class FooController {
  def actionMethodThatRequiresAValidUser = {
    if (!session?.user) {
      redirect(controller: "authentication", action: "login")
    }
    session.user.refresh()
    ...
    /* do stuff */
    ...
  }
}

それはベストプラクティスですか?より良い方法および/またはより簡潔な方法で行うことはできますか?

4

12 に答える 12

9

filterを使用すると、同じ繰り返しコードをフィルターに入れ、コントローラーを実際のアクションに集中させることができます。

于 2009-01-27T22:23:45.290 に答える
3

beforeInterceptor を使用するのが適切だと思います。そして、このJSecurity プラグインを見てみましょう。ユーザー認証には、jsecurity プラグインが非常に便利です。

于 2009-01-28T08:48:02.753 に答える
1

他の人が行ったフィルターの提案に同意します。それがうまくいかない場合は、コントローラーでbeforeInterceptorを定義して重複を最小限に抑えることもできます。

于 2009-01-27T22:35:23.723 に答える
1

Spring Security Coreを通過しましたか。
セキュリティ目的のための素晴らしいフレームワークです..

于 2013-04-23T09:09:38.693 に答える
1
import grails.plugins.springsecurity.Secured

@Secured(['ROLE_ADMIN', 'ROLE_SUB_ADMIN', 'ROLE_USER'])

クラスDashboardController{

デフ作成(){

    [bankInstance: new Bank(params)]

}

def save() {
    def bankInstance = new Bank(params)
    if (!bankInstance.save(flush: true)) {
        render(view: "create", model: [bankInstance: bankInstance])
        return
    }

    flash.message = message(code: 'default.created.message', args: [message(code: 'bank.label', default: 'Bank'), bankInstance.id])
    redirect(action: "show", id: bankInstance.id)
}
于 2014-09-01T11:02:37.150 に答える
1

コードを複製するのではなく、これをフィルターとして定義してみてください。

于 2009-01-27T22:29:07.603 に答える
1

多くの方法があります より良いアプローチは、フィルターを使用して(前に)、 if (!session?.user) { redirect(controller: "authentication", action: "login") } このコードをフィルターに入れることです。

2 つ目は、Spring セキュリティ プラグインを使用して、自動的に制御されるユーザー セッションについて心配する必要がないようにすることです。 プラグインの詳細については、 http://blog.springsource.org/2010/08/11/simplified-spring-security-with-grails/を参照してください。

于 2013-05-06T17:00:03.423 に答える
0

grails 用の Apache shiro プラグインを試すこともできます

于 2013-06-10T08:52:34.497 に答える
0

私は 2 番目の春のセキュリティです。ここで車輪を再発明しようとしています。これはすべてあなたのために行われました。

于 2013-12-27T20:49:15.707 に答える