2

grails の現在のユーザー ドメイン インスタンスに常にアクセスできるようにしたいと考えています。現在、春のセキュリティを使用しています。すべての GSP ページのコンテキストに現在のユーザーを追加するにはどうすればよいですか? request.user を使用していましたが、常に入力されるとは限りません。

たとえば、いつでもアクセスできるようにしたい

${_currentUser.messages}

UserDetails サービスについては知っていますが、それは静的データ用です。変化する可能性のあるものにアクセスします。

4

2 に答える 2

2

フィルターを使用して、grails-app/conf に追加します。

package my.project

class UserFilters {

    def springSecurityService

    // add user to params object always
    def filters = {
        addUser(controller: '*', action: '*') {
            before = {
                params.myAddedUser = springSecurityService.currentUser
            }
        }
    }

    // add user to model if it is defined
    after = { Map model ->

        if(!model) model = [:]

        if ( params && params['myAddedUser']) model.myAddedUser = params.myAddedUser
    }

}

その後、すべてのビュー/コントローラーでそれを取得できます。ビューでは、モデルがコントローラー (任意のモデル) で定義されている場合、パラメーターまたはモデルを介してアクセスでき、コントローラーでは、params オブジェクトを介してアクセスされます。

ただし、画像にも適用されるので注意してください。したがって、ドキュメントを使用して、必要なものにフィルターを適用しますhttp://grails.org/doc/2.2.1/ref/Plug-ins/filters.html

于 2013-06-06T18:00:11.657 に答える
0

Spring Security には、現在のユーザーを取得するためのサービスクラスがあります。これは で使用できますTagLib。例えば:

class MyTagLib {
  def springSecurityService
  def messages = { attrs ->
    def messages = springSecurityService.currentUser.messages
    ...
  }
}
于 2013-06-06T16:15:02.957 に答える