Какой шаблон проектирования использовать для аутентификации пользователя в Java - PullRequest
2 голосов
/ 27 октября 2008

Существуют определенные общие компоненты, которые используются в проектах:

  1. Аутентификация пользователя и авторизация
  2. Обработка исключений
  3. Регистрация
  4. Электронная почта
  5. Доступ к базе данных
  6. Кэширование и т. Д.

Существует ли согласованный шаблон проектирования, который можно использовать для каждого из этих общих модулей? Между прочим, структура может варьироваться, например, JAAS / JNDI для аутентификации и авторизации пользователя, log4j / java для ведения журнала, JavaMail для E-mai, JDBC / Hibernate для доступа к базе данных.

Например, есть DAO для доступа к базе данных. Есть ли хороший шаблон проектирования, который можно использовать для аутентификации и авторизации пользователя независимо от используемой инфраструктуры (JAAS / JNDI / SSO)?

Ответы [ 7 ]

3 голосов
/ 27 октября 2008

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

Я использовал это в очень элементарных вещах только как часть моего весеннего обучения с Родом Джонсоном.

2 голосов
/ 28 октября 2008

Я бы с осторожностью использовал аспектно-ориентированное программирование и особенно перехватчики. Перехватчики и некоторые реализации AOP работают во время выполнения и фактически не изменяют код, который выполняется.

Что произойдет, если приложение развернуто неправильно, без перехватчика / аспекта? Ну, в общем, ваше приложение, вероятно, сильно зависит от функции, предоставляемой перехватчиком, и будет заметно ломаться без него. Но авторизация немного другая. Если пользователь не авторизован, что-то происходит, например, вызывает исключение. Но в типичном случае пользователь авторизован, и перехват не разрешен. Когда приложение случайно развертывается без перехватчика авторизации, оно фактически авторизует все операции.

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

Исторически, когда АОП было решением проблемы, безопасность рассматривалась как вероятная жертва. К сожалению, поклонники АОП склонны сбрасывать со счетов критическое мышление, необходимое для безопасного применения его к этой важной функции. Я верю, что это можно сделать, но это не так просто, как аннотировать пару методов.

2 голосов
/ 27 октября 2008

Для сквозных задач вы можете рассмотреть Аспектно-ориентированное программирование (AOP). Не столько шаблон проектирования, но он используется в описанных вами сценариях. Короче говоря, у вас есть ряд компонентов, которые требуют безопасности ... вы определяете безопасность в другом месте и система AOP добавляет ее в ваши компоненты по мере необходимости. Таким образом, вы разрабатываете свой код вокруг основного бизнес-кейса, не слишком заботясь о безопасности. Безопасность вводится автоматически.

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

Здесь - документация самой Spring о ее АОП.

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

1 голос
/ 28 октября 2008

Я думаю, вы говорите о шаблоне перехватчика.

Это чертовски просто в веб-приложениях, потому что оно уже встроено в спецификацию контейнера сервлета через web.xml

http://java.sun.com/blueprints/corej2eepatterns/Patterns/InterceptingFilter.html

Это становится немного сложнее в мире j2se ... как если бы вы хотели сделать все полностью прозрачным, вы могли бы использовать динамический прокси (подумайте о весенних транзакционных ошибках) http://java.sun.com/j2se/1.5.0/docs/api/java/lang/reflect/Proxy.html

1 голос
/ 27 октября 2008

JAAS сам определяет несколько: Subject, Prinicipal, Credential и LoginContext . Любая структура аутентификации должна иметь похожие классы.

2, которые на первый взгляд специфичны для JAAS, но очень важны для обеспечения аутентификации независимо от бизнес-логики приложения: CallBackHandlers и LoginModules .

0 голосов
/ 27 октября 2008

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

Существует Eclipse-плагин , если вы решите попробовать.

0 голосов
/ 27 октября 2008

Я не знаю шаблонов проектирования для аутентификации / авторизации пользователей, но ... если вы хотите легко их издеваться, в .NET мы используем провайдеров.

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

Что ты думаешь?

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