我希望获得sec:loggedInUserInfo的值并尝试进入名为user的变量。
我的代码如下所示:
<sec:loggedInUserInfo field="username" />
<%
def user = *value of field loggedInUserInfo *
%>
有可能这样做吗?
答案 0 :(得分:10)
这个更简单,对我来说很好用:
<g:set var="user" value="${sec.username()}" />
答案 1 :(得分:3)
将<sec:loggedInUserInfo>引用的UserDetails实例的任何字段分配给您可以使用的变量:
<g:set var="fullName" value="${sec.loggedInUserInfo(field:'fullName')}" />
答案 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 [退出]!