LINUX.ORG.RU

[JPA] Как очистить поле сущности при удаленной работе?

 


0

1

Есть универсальный CRUD DAO для работы с разными сущностями. Некоторые сущности ссылаются на сущность пользователя. В поле пользователя - пароль. С ним нужно работать. Но этот DAO пока-что открыт как обычный CRUD, эта програма еще не в продакшне. В DAO тоже кода нет особо, он просто дергает дальше вызовы JPA.

Этот DAO открыт в сеть, но хотелось бы сделать так, чтобы в рамках сервера пароль был, но перед отправкой на клиент пароль в сущности очищался. Для связи используется Spring HttpInvoker. Я бы поставил проверку на getEntity в Dao, но она не проверяет если другие обьекты ссылаются на юзера. Бегать по дереву с рефлексией не хочется.

У кого-то есть неуродливое решение? Да, это не хорошая практика отдавать DAO в сеть, но это подходит отлично для нашей задачи в этом случае. Хотелось бы просто стрипнуть сущность пользователя при отправке по сети

★★★★★

>Да, это не хорошая практика отдавать DAO в сеть

Если я правильно понял суть проблемы, то может быть лучше использовать веб-сервисы?

eternity
()
Ответ на: комментарий от eternity

А если другие сущности ссылаются на юзера, то они его вытянут за собой

vertexua ★★★★★
() автор топика

1. Если разделить сущность пользователя на две - открытая и закрытая сущности пользователя. В открытой хранить данные, которые можно отправить на клиент, в закрытой - те данные, которые остаются на сервере. И открыть в сеть только открытую сущность.

2. Как вариант предыдущего пункта, создать два объекта - саму сущность и его заглушку (stub). Если все описано через интерфейсы, тогда везде просто подсовывать заглушку, где нет пароля. А когда нужен пароль, прозрачно через заглушку вытаскивать всю сущность. Здесь можно определить операции, для которых нужен пароль и, например, через aspectj при получении заглушки, подменять её на нужную сущность.

3. Использовать свой сериализатор или расширить используемый. Если свой, то лучше через java.io.Externalizable.

P.S.: какой из 3-х вариантов брать надо смотреть по задаче, как систем устроена.

P.S.S.: я бы брал второй вариант, потому что не надо делать свой костыль с сериализатором и не меняется доменная модель.

ma1uta ★★★
()
Ответ на: комментарий от ma1uta

Уже сделал так. User имеет свойство person. Все юзают Person, от которого наследуются уже разные типы людей. Вся работа идет с Person.

1. Вот так уже и сам решил делать.

2. Аспекты тут не в тему. Усложнит сильно. Но до конца я не понял что вы хотели

3. Оно особо ничего не решит. Ну не буду я его сериализировать. А оно в каком-то кеше потеряется.

vertexua ★★★★★
() автор топика

Если коротко, то DTO и Dozer Mapper тебе в помощь.

Если не коротко. Сущность Юзер, которая живет внутри твоих crud операций и та, которую ты передаешь в сеть - это разные сущности. Каждая из них полезна по своему в своем конексте. Но в силу их схожести ты используешь одну сущность. Но не смотря на похожесть, это разные сущности. В этом и есть корень твоих проблем.

Все таки завести отдельную сущность придется (причем концептуально она не является базовым классом твоего юзера). Сделай ей immutable ну и все что нужно туда прилепи. А т.к. она сильно похожа на твоего юзера, возьми dozer mapper.

dizza ★★★★★
()
Ответ на: комментарий от vertexua

начинающий разбираться в DAO

Добрый день, vertexua! пишет Вам kioria, или просто Богдана. Я только начинаю разбираться в технологии DAO; я посещаю курсы java в EPAM, и сейчас работаю над своим веб-проектом. По заданию, мне необходимо использовать шаблон Дао для доступа к данным в СУБД MySQL.Вы не могли бы мне помочь в организации логики веб-приложения по прокату автомобилей? Если ответ положительный, то продолжите мою тему. С уважением, Богдана

kioria
()
Ответ на: комментарий от dizza

плюсую, кстати, правильный подход.
В том же спринге User и Credentials - это разные вещи. В первом хранится бизнес информация, во втором данные, используемые для авторизации.

JFreeM ★★★☆
()
Ответ на: начинающий разбираться в DAO от kioria

Эээ. Какое-то место странное для общения на эту тему. Ну вообще я к вам прийду возможно на неделе если будет время, многое расскажу. Думаю лично садиться и строить дао вместе нет смысла. Тем более что именно в этом и есть вашу учебное задание. И я вообще говоря не знаю все ваши задания.

P.S. Можно вопросик. А кто посоветовал на Linux.Org.Ru искать vertexua? Думаю у того кто посоветовал мог бы быть просто мой email.

vertexua ★★★★★
() автор топика
Ответ на: комментарий от vertexua

Re от kioria

Ок, почты у меня Вашей нет) но есть несколько вопросов)). Развивать их здесь не буду, так как не место, Вы правы. Если Вы не против, могу отписаться на ваш мейл, если позволите. С ДАО сейчас сижу как раз разбираюсь)

kioria
()
Ответ на: комментарий от JFreeM

Они курсы хорошие открыли в КПИ, там изучают трехзвенку, Java Core, паттерны, ну и в общем выпрямляют руки. Потом предлагают работу на Junior в Епаме. Наконец-то компании взялись за универы.

vertexua ★★★★★
() автор топика
Ответ на: Re от kioria от kioria

*жители ЛОРа извините за чатик*

Пиши на vertexua@yahoo.com, но я вообще на этой неделе немного занят буду. Еще поспрашивай других студентов

vertexua ★★★★★
() автор топика
Ответ на: комментарий от JFreeM

О, круто, у меня друг сейчас в ХИРЭ, надо ему сказать.

vertexua ★★★★★
() автор топика
Ответ на: комментарий от vertexua

Re от kioria

Ок, спасибо за ответ! Я отпишусь на Вашу почту от kiraukr@ukr.net. Какой совет дадите мне, чтобы успешно пройти собеседования в EPAM на junior'a? С уважением, Богдана

kioria
()
Ответ на: Re от kioria от kioria

facepalm... Весь ЛОР (кому это надо вообще) теперь знает где я работаю. Пожалуйста, если вы знаете еще больше информации о мне, то не выкладывайте пожалуйста ее здесь

vertexua ★★★★★
() автор топика
Ответ на: комментарий от vertexua

Re от kioria

Я ничего о Вас не знаю), не переживайте. Я не хотела причинить Вам ни малейшего беспокойства, извините, если вышло что не так)) С уважением, Богдана)

kioria
()
Ответ на: Re от kioria от kioria

Все нормально )

vertexua ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.