Почему я должен использовать JAAS против рукописной безопасности? - PullRequest
13 голосов
/ 21 апреля 2011

Я получил рукописную защиту, простой сервлет-фильтр, который перенаправляет не авторизованного пользователя на его страницы входа.Контроллер входа перенаправляет их на запрошенный URL после успешной аутентификации или на их главную страницу.Этот подход прекрасно работает, единственный недостаток в том, что я должен передать объект User, который хранится в HttpSession, через трассировку стека EJB-компонентам.

Теперь я переписал некоторый код и использую Spring-security в качестве аутентификации на основе http.Он автоматически интегрируется с Glassfish JAAS.

Мне больше не нужно передавать User через stacktrace, достаточно вызова sessionContext.getCallerPrincipal().Но основной объект возвращает мне только userName, а не userId, поэтому я должен выполнить сложение select, если мне нужен, например, userId.

1) Есть ли способ расширить объект Principal, чтобы он мог хранить больше свойств?

2) Почему я должен использовать JAAS или Spring Security или другую инфраструктуру безопасности, а не просто рукописный фильтр сервлетов?

Ответы [ 2 ]

10 голосов
/ 22 апреля 2011

2) Использование стандартного механизма безопасности, такого как JAAS, имеет много преимуществ:

  1. Вы можете легко изменить способ аутентификации пользователя только путем настройки вашего сервера - без необходимости что-либо менять внутри кода.

  2. Вы можете быть уверены, что ваша система безопасности обновлена, поддерживает самые надежные алгоритмы, надежно хранит Принципал и так далее.Опять же, просто оставаясь в курсе событий с вашим сервером, фреймворком и т. Д. Наличие рукописного модуля безопасности подвержено ошибкам и скоро устареет.

  3. Вы можете использовать безопасность фреймворка- напримерТеги безопасности web.xml, аннотации безопасности EJB.Поскольку JAAS является стандартным способом аутентификации, вы можете быть уверены, что внедрение будущих технологий будет проще, поскольку все серьезные технологии будут поддерживать JAAS (Spring security и т. Д.).Если ваше программное обеспечение планируется расширять, вам определенно понадобится стандарт.

  4. Это сэкономит вам время и силы.JAAS обеспечивает как аутентификацию, так и авторизацию, аккуратно упакованную и настраиваемую в течение нескольких минут.

  5. Я рекомендую дополнительно прочитать о J2EE security , или вы можете найти больше ресурсов в OWASP направляющие.

0 голосов
/ 08 сентября 2015

1) Я не знаю, можно ли продлить класс Директор . Но учтите, что в вашем LoginModule , прежде чем завершить аутентификацию, вызывая commit () (возможно, в вашем login () метод), можно добавить учетные данные в Subject . Для этого просто добавьте объект в один из списков: Subject. getPrivateCredentials () или Subject. getPublicCredentials () (без аргументов). Вы можете добавить много объектов, таких как ваш собственный класс, строка или что угодно.

Чтобы получить объекты в вашем приложении, используйте процедуру, описанную в мой другой ответ .

import javax.security.jacc.PolicyContext;

Subject subject = (Subject) PolicyContext.getContext("javax.security.auth.Subject.container");
...