在视图中用spring security访问当前登录的用户用户名
Posted
技术标签:
【中文标题】在视图中用spring security访问当前登录的用户用户名【英文标题】:Access the current logged in user username with spring security in the view 【发布时间】:2013-05-28 05:28:26 【问题描述】:如何在 gsp 视图中使用 springSecurity 访问当前登录的用户用户名,或者更具体地说,在文本字段中使用此值?
下面的这个解决方案不起作用:
value="$sec.loggedInUserInfo(field:'username')"
【问题讨论】:
错误是什么?包含堆栈跟踪会有所帮助,因为“不起作用”非常模糊。 我没有错误,但在文本字段中没有显示任何内容 我担心你将无法使用sec
taglib,因为它总是写入 DOM。您可以在controller
操作中使用springSecurityService.authentication.name
并在model
中设置可以在视图中使用的值,除非有我不知道的直接过程。
假设您的用户已成功登录,您在这里应该可以使用,您也可以尝试 。我测试了两者,它们都在文本框上工作。如果它不起作用,请遵循 dmahapatro 方法并确保 authentication.name 不为空。
见:***.com/q/16444220/1700321。
【参考方案1】:
以下几行在我的测试中都可以正常工作。
<input name="username" type="text" value="$sec.username()" />
<input name="username" type="text" value="$sec.loggedInUserInfo(field: 'username')" />
您遇到的错误可能来自其他地方。你能在 GSP 中只使用那个输入标签来测试吗?
【讨论】:
我什至在另一个 GSP 中也尝试过,但我遇到了同样的问题而不是错误,但我在文本字段中什么都没有,它是空的 这两种解决方案也对我有用(我写的是:<p> "$sec.username()" </p>
)。可能没有用户登录@zgaw87?【参考方案2】:
自定义 Taglib 选项以获取有关登录用户的各种信息到视图中。
ExamplNameTagLib.groovy
class ExamplNameTagLib
static namespace = 'foo'
def springSecurityService
def currentUserProps = attrs ->
def user = springSecurityService.getCurrentUser()
if (user)
if (attrs.username)
out << user.username
else if (attrs.firstName)
out << user.firstName
else if (attrs.lastName)
out << user.lastName
else if (attrs.email)
out << user.email
exampleViewPage.gsp
//Return username from taglib of the logged in user
<g:field type="text"
name="username"
value="$foo.currentUserProps(username: true)" />
//Return email from taglib of the logged in user
<g:field type="email"
name="email"
value="$foo.currentUserProps(email: true)"/>
【讨论】:
以上是关于在视图中用spring security访问当前登录的用户用户名的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security:在 servlet 过滤器中访问当前经过身份验证的用户
Spring security 和 spring data :安全访问不属于当前用户的数据
Spring security - 未调用自定义 userDetailsService 实现
如何知道当前的 Web 访问者是不是使用 Spring Security 3.0 登录