Этот код прибудете это вошедшего в систему пользователя, используя подключаемый модуль Spring Security (Acegi):Как сохранить Spring Security вошедшего в систему пользователя в сессии
def principalInfo = authenticateService.principal()
def person = null
if (principalInfo != "anonymousUser" && principalInfo.username) {
person = Person.findByUsername(principalInfo.username)
}
Я тогда хотел бы сделать:
session.user = person
Это нужно сделать после входа пользователя в систему. Я не могу понять, куда поместить мой код. Похоже, что это должно быть какое-то место в контроллере входа, но я не вижу, где.
Это почти работает, но если вы доступ любое связанное с этим свойство, если это не удается, например Если я сделаю человек = authenticateService.userDomain() company = person.company Я получаю исключение LazyInitializationException. Может быть, поэтому люди использовали такой код, как я уже выше? Это где мне нужен пользовательский пользовательский сервис? Или, если вы решите решить проблему? –
Вы можете использовать целеустремленный выбор, но это расточительно, если вам это нужно только для этого варианта использования. Чтобы избежать LIE, вы можете повторно присоединить экземпляр (def person = authenticateService.userDomain(); person.attach()) или перезагрузить его по id (def person = Person.get (authenticateService.userDomain(). Id)). Это предпочтительнее, если вы можете сделать это только тогда, когда знаете, что это будет необходимо - если вам просто нужны строковые, логические или числовые свойства, тогда нет необходимости повторно подключаться или перезагружаться. –
person.attach() дал мне исключение NonUniqueObjectException, но def person = Person.get (authenticateService.userDomain(). Id) работает. Спасибо! –