Glassfish / J2EE: легкий способ настроить аутентификацию пользователя, чтобы предотвратить вход нескольких пользователей? - PullRequest
0 голосов
/ 08 декабря 2010

ПРЕДПОСЫЛКА

Мы используем сервер Glassfish и настроили его с включенным Single Sign-On (SSO) , чтобы пользователь мог проходить аутентификацию только один раз и могдоступ к нескольким веб-приложениям.Каждое веб-приложение задает имя входа на основе FORM (* j_security_check *), и для целей разработки мы используем File Realm .Это работает нормально.

Glassfish генерирует как Сеанс (с областью доступа к пути веб-приложения, где проходила аутентификация пользователя), так и Cookie (JSESSIONIDSSO), чтобы идентифицировать состояние аутентификации для сервера (и других веб-приложений).

Вы можете заставить пользователя пройти повторную аутентификацию, вызвав Session.invalidate () в сеансе веб-приложения пользователя, что также делает недействительным файл cookie единого входа.Все это прекрасно работает.

ПРОБЛЕМА

Мы ищем способ запретить пользователю одновременный вход в систему.Кажется естественным попытаться перехватить либо созданный пользователем сеанс (или файл cookie единого входа), и сохранить его на карте с указанием имени пользователя, которую можно проверить, когда кто-нибудь заходит на страницу входа, и аннулировать старый сеанс, если он существует.

В идеале мы хотели бы обработать некоторое событие после аутентификации в контексте, где мы можем получить доступ как к имени пользователя (или объекту Principal), так и к созданному сеансу.(Я смотрел на HttpSessionListener, но, похоже, он не предоставляет никакого доступа пользователю, с которым он связан).

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

1 Ответ

0 голосов
/ 15 марта 2011

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

...