Можно ли создать управляемый компонент сеанса JSF2 внутри фильтра? - PullRequest
2 голосов
/ 30 марта 2012

Я хотел бы создать и заполнить сессионный компонент JSF2 внутри фильтра. Вариант использования следующий:

  • 1) аутентификация пользователя с использованием CAS
  • 2) Сервер CAS заполняет атрибуты принципала и в одном Атрибут есть группа пользователей в LDAP / AD (эта информация будет использоваться чтобы получить доступ к пользователю)
  • 3) фильтр вызывается только когда пользователь аутентифицирован и извлекает информацию о группе из принципала
  • 4) сессионный компонент используется для хранения других главных атрибутов (и другая информация, полученная из БД с использованием этих атрибутов)
  • 5) если сессионный компонент уже существует для этого пользователя, ничто не должно быть сделано
  • 6) если сессионный компонент не существует, его следует создать (в фильтр я догадываюсь) и заселил
  • 7) фильтр позволяет пользователю получить доступ к веб-странице, которая содержит вся информация в сессионном компоненте.

Это возможно? Я знаю, что когда сессионный компонент создается, он присоединяется в качестве атрибута к сеансу http, поэтому к нему легко получить доступ в фильтре, но я не знаю, возможно ли создать сессионный компонент из фильтра. .

1 Ответ

2 голосов
/ 30 марта 2012

Мы сделали то же самое (аутентификация OpenID), не создавая сессионный компонент вручную.Все, что вам нужно, - это обернуть все токены аутентификации, идентификаторы, роли и другие элементы в один сериализуемый класс (пусть это будет UserAuthInfo) и сохранить экземпляр этого класса в карте сеанса после аутентификации.Позже, в обычном сессионном компоненте, вы проверяете наличие этого объекта в карте сеанса, инициализируете все необходимые данные, читаете БД, делаете другие вещи и дополнительно удаляете экземпляр UserAuthInfo из карты сеанса.

...