#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"}}]"""
}
}
Таким образом, на каждой странице он отображается как: Приветствуемое ИМЯ ПОЛЬЗОВАТЕЛЯ [Выход]!