我希望始终可以访问 grails 中的当前用户域实例。我目前正在使用弹簧安全。如何将当前用户添加到所有 GSP 页面的上下文中?我正在使用 request.user 但并不总是填充。
例如,我希望能够始终访问
${_currentUser.messages}
我知道 UserDetails 服务,但那是针对静态数据的。我将访问可能会发生变化的事物。
我希望始终可以访问 grails 中的当前用户域实例。我目前正在使用弹簧安全。如何将当前用户添加到所有 GSP 页面的上下文中?我正在使用 request.user 但并不总是填充。
例如,我希望能够始终访问
${_currentUser.messages}
我知道 UserDetails 服务,但那是针对静态数据的。我将访问可能会发生变化的事物。
使用过滤器,添加到 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
    }
}
然后您将能够在所有视图/控制器中检索它。在视图中,如果模型是在控制器(任何模型)中定义的,则可以通过参数或模型访问它们,而在控制器中,它将通过参数对象访问。
但请注意,它也将应用于图像。因此,使用文档将过滤器应用于您需要的内容http://grails.org/doc/2.2.1/ref/Plug-ins/filters.html
Spring Security 有一个服务类来获取当前用户。您可以在TagLib. 例如:
class MyTagLib {
  def springSecurityService
  def messages = { attrs ->
    def messages = springSecurityService.currentUser.messages
    ...
  }
}