Как попытаться ввести sec: loggedInUserInfo в переменную в gsp

#grails #gsp

#grails #gsp

Вопрос:

Я хочу получить значение sec:loggedInUserInfo и попытаться ввести переменную с именем user.

Мой код выглядит следующим образом:

 <sec:loggedInUserInfo field="username" /> 

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

Возможно ли это сделать?

Ответ №1:

Это проще и отлично работает для меня:

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

Ответ №2:

Чтобы присвоить любое поле экземпляра UserDetails, на которое ссылается <sec:loggedInUserInfo> переменной, вы можете использовать:

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

(смотрите также сведения о пользовательском пользователе)

Ответ №3:

Если вы хотите, чтобы объект user был в gsp, просто передайте его обратно как часть карты модели из контроллера. в действии контроллера выполните

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

Ответ №4:

Я не уверен, можем ли мы использовать этот тег напрямую, я не мог найти его ранее, поэтому я создал свой пользовательский тег для этой цели

<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
  

}

Комментарии:

1. Сработало как по волшебству! Спасибо.

Ответ №5:

Я создал один 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"}}]"""
    }
}
  

Таким образом, на каждой странице он отображается как: Приветствуемое ИМЯ ПОЛЬЗОВАТЕЛЯ [Выход]!