Как получить информацию о пользователе в сеансе без сохранения состояния - PullRequest
1 голос
/ 01 декабря 2008

Я работаю над существующим приложением j2ee и должен удалить некоторые вызовы методов, специфичные для поставщика, из кода.

Daos за фасадом сеанса делает вызовы в контейнер ejb для получения идентификатора пользователя и пароля - для подключения к базе данных. Часть идентификатора пользователя и пароля в исходном тексте, используемая для подключения к серверу.

Я могу получить идентификатор пользователя с помощью sessionContext.getCallerPrincipal ()

Есть ли в любом случае доступ к SECURITY_CREDENTIALS, используемому в соединении с сервером, или есть способ передать информацию из соединения с сервером в ejbs (все они являются сессионными компонентами без сохранения состояния).

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

Ответы [ 3 ]

1 голос
/ 01 декабря 2008

Я не могу дать вам общее решение, но это то, что сработало для нас. У нас есть сервер приложений, который подключается к LDAP как конкретный пользователь, у которого есть возможность запрашивать учетные данные для других пользователей. Затем у нас есть некоторый общий код безопасности, который мы можем использовать для запроса учетных данных пользователей из сессионных компонентов, основываясь на идентичности пользователей при их первоначальном входе в систему (так же, как вы делаете это через getCallerPrincipal ()).

Мы также помещаем идентификатор пользователя в локальную переменную потока, так что классы в цепочке вызовов из EJB не должны быть «осведомлены о контейнере». Они просто получают доступ к идентификатору из локального потока и используют классы безопасности для поиска информации профиля пользователя. Это также позволяет легко изменить реализацию для тестирования или даже что-то иное, чем поиск LDAP.

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

0 голосов
/ 01 декабря 2008

Robin

Звучит так, как я планировал. Я решил, что сразу после успешного подключения к серверу позвоню, чтобы загрузить учетные данные в переменную threadLocal в моем классе подключения. Я надеялся, что есть более легкий путь - но я думаю, что нет.

0 голосов
/ 01 декабря 2008

Обычно модель безопасности Java EE не позволяет получать пароль пользователя по соображениям безопасности. Но это зависит от реализации. Некоторые поставщики предоставляют методы для получения информации такого рода, но если вы полагаетесь на такие реализации, помните, что переносимость приложения будет нарушена.

Одним из распространенных подходов является написание фильтра сервлета для перехвата запроса на вход в систему и сохранения копии учетных данных для последующего использования. Если ваше приложение не использует инфраструктуру безопасности Java EE, это может быть легко реализовано. Это потому, что некоторые поставщики запрещают вам фильтровать сервлет аутентификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...