Grails 将登录用户添加到所有GSP页面的上下文中

Grails 将登录用户添加到所有GSP页面的上下文中,grails,spring-security,Grails,Spring Security,我希望始终能够访问grails中的当前用户域实例。我目前正在使用spring security。如何将当前用户添加到所有GSP页面的上下文中?我使用的是request.user,但并不总是填充它 例如,我希望能够始终访问 ${_currentUser.messages} 我知道UserDetails服务,但这是针对静态数据的。我将访问可能发生变化的内容。Spring Security有一个类来获取当前用户。您可以在TagLib中使用它。例如: class MyTagLib { def sp

我希望始终能够访问grails中的当前用户域实例。我目前正在使用spring security。如何将当前用户添加到所有GSP页面的上下文中?我使用的是request.user,但并不总是填充它

例如,我希望能够始终访问

${_currentUser.messages}
我知道UserDetails服务,但这是针对静态数据的。我将访问可能发生变化的内容。

Spring Security有一个类来获取当前用户。您可以在
TagLib
中使用它。例如:

class MyTagLib {
  def springSecurityService
  def messages = { attrs ->
    def messages = springSecurityService.currentUser.messages
    ...
  }
}

使用过滤器,添加到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或model访问,而在控制器中,则可以通过params对象访问模型


但请注意,它也将应用于图像。因此,请使用文档将过滤器应用于您需要的内容

再给我一点。。。我在想我可以用注入来做些什么……这很好,但我希望有一种更直接的方式来访问用户实例。我不想为每个属性创建一个标记。。。