在视图中用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 中也尝试过,但我遇到了同样的问题而不是错误,但我在文本字段中什么都没有,它是空的 这两种解决方案也对我有用(我写的是:&lt;p&gt; "$sec.username()" &lt;/p&gt;)。可能没有用户登录@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 - 未调用自定义 userDetailsS​​ervice 实现

如何知道当前的 Web 访问者是不是使用 Spring Security 3.0 登录

Grails Spring Security 验证多个 url 的访问

如何使用 Spring Security 和 Thymeleaf 获取当前登录用户的 ID