如何尝试秒:将用户信息记录到gsp中的变量中

时间:2011-05-26 03:31:46

标签: grails gsp

我希望获得sec:loggedInUserInfo的值并尝试进入名为user的变量。

我的代码如下所示:

<sec:loggedInUserInfo field="username" /> 

<%
  def user = *value of field loggedInUserInfo *
%>

有可能这样做吗?

5 个答案:

答案 0 :(得分:10)

这个更简单,对我来说很好用:

<g:set var="user" value="${sec.username()}" />

答案 1 :(得分:3)

<sec:loggedInUserInfo>引用的UserDetails实例的任何字段分配给您可以使用的变量:

<g:set var="fullName" value="${sec.loggedInUserInfo(field:'fullName')}" />

(另见Custom User Details

答案 2 :(得分:2)

如果您想要gsp中的用户对象,只需将其作为模型映射的一部分从控制器传回。在控制器动作中

def user = springSecurityService.getCurrentUser()
render view: 'yourgsp', model: [user: user]

答案 3 :(得分:1)

我不确定我们是否可以直接使用该标签,我之前找不到它,所以我为此目的制作了自定义标签

<m:userName id="${session.SPRING_SECURITY_CONTEXT?.authentication?.principal?.id}"/>

def userName = { attrs ->
Long id = attrs['id'] ? attrs['id'].toLong() : null
User user = User?.get(id);
out << user?.firstName

}

答案 4 :(得分:0)

我创建了一个taglib作为loggedinUser,它在gsp页面上添加为:

Welcome <g:loggedInUser/> ! 

在我的项目中每个gsp上显示登录用户名。在自定义标记库中,我的代码如下:

def springSecurityService

def loggedInUser={
    if(springSecurityService.getPrincipal().equals("anonymousUser")){
        response.sendRedirect("${request.contextPath}/login/auth")
    }else{
        out <<"${springSecurityService.currentUser.username}"
        out << """ [${link(controller:"logout"){"Logout"}}]"""
    }
}

所以它在每个页面上显示为:欢迎USERNAME [退出]!