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