Плагин Spring Security Core - Как получить доступ к идентификатору пользователя из скрытого поля - PullRequest
4 голосов
/ 09 февраля 2012

Я пытаюсь установить hiddenField в представлении «создать», где в поле указывается идентификатор текущего пользователя, вошедшего в систему.Что вы получаете из свойства "springSecurityService.principal.id".

Мне было интересно, возможно ли сделать это исключительно из шаблона вместо передачи значения из контроллера.например,

<%@ page import="grails.plugins.springsecurity.SpringSecurityService" %>
<% def springSecurityService %>

<html>
...
...
<g:hiddenField name="user.id" value="${springSecurityService.principal.id}"/>
...

Я пробовал этот код, но в итоге получил исключение NullPointer со ссылкой на свойство "Principal".

Есть ли способ сделать это или я должен явнопередать идентификатор текущего пользователя, вошедшего в систему, из метода «create»?

ПРИМЕЧАНИЕ. Да, я знаю, что для каждого достаточно просто создать запрос POST с помощью скрытого поля с измененными параметрами.В коде контроллера есть проверки, чтобы гарантировать, что зарегистрированный в данный момент пользователь может только создавать, редактировать, удалять свои собственные сообщения.Мой вопрос больше связан с тем, что не нужно вводить код для передачи текущего пользователя, вошедшего в систему, в три разных представления.

Ответы [ 3 ]

13 голосов
/ 10 февраля 2012

попробуйте использовать следующий синтаксис

<g:hiddenField name="user.id" value="${sec.loggedInUserInfo(field:"id")}"/>
5 голосов
/ 09 февраля 2012

Сохранение идентификатора вошедшего в систему пользователя в виде скрытого поля в представлении - очень плохая идея, потому что любой, кто имеет базовые знания о работе в Интернете, может заменить это значение идентификатором другого пользователя.

Вместо этого вы должны использовать springSecurityService на стороне сервера, чтобы получить текущего пользователя. Вы можете получить ссылку на этот сервис через внедрение зависимостей в классе домена, контроллере, сервисе, taglib и т. Д.

class MyController {
  def springSecurityService

  def myAction() {
    def currentUser = springSecurityService.currentUser
  }
}
4 голосов
/ 06 марта 2014

Захватите службу безопасности через приложениеContext:

$ {applicationContext.springSecurityService.currentUser.id}

<g:hiddenField name="user.id" value="${applicationContext.springSecurityService.currentUser.id}"/>
...