Структура регистрации пользователя для Java

Я заинтересован в использовании чего-то вроде TomEE (реализация веб-профиля Java EE 6) для создания веб-сайта (в таком инструменте, как Eclipse или NetBeans), поскольку мне нравятся следующие вещи:

  • Уровень данных OOB с транзакциями, POJO/JPA, чтобы избежать записи уровня базы данных, пул / кэширование соединений для повышения производительности, оптимистичный параллелизм
  • Концепции MVC для уровня представления (т.е. JSF)
  • возможности связи с другими компонентами Java, работающими на других экземплярах JVM

Далее я хотел бы определить целесообразность включения некоторых дополнительных строительных блоков, чтобы дать мне основу для типичного механизма регистрации / входа в Интернет.

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

  • Подтверждение электронной почты при регистрации
  • Потерянный пароль / восстановление учетной записи [Обновление: Emmet]
  • CAPTCHA во время регистрации [Обновление: Spring Security 3: Интеграция сервиса reCAPTCHA, Emmet]
  • Рецензированная реализация обработки / хранения пароля
  • Приятно иметь: согласование с лучшими практиками безопасности OWASP
  • Приятно иметь: Основное администрирование пользователей [Обновление: Emmet]

В идеале я хотел бы, чтобы механизм аутентификации / авторизации использовал расширяемый слой POJO, дополненный базовыми примерами страниц. Из моих исследований кажется, что JAAS, вероятно, не собирается сокращать его, и я немного не уверен, если такие проекты, как Apache Shiro, Spring Security, DeltaSpike или PicketLink, дадут мне толчок в направлении вперед или если это излишество.

Может ли кто-то более знакомый с экосистемой Java, пожалуйста, объясните, что доступно для преодоления разрыва между реализацией веб-профиля и описанными выше функциями (а именно, структурой регистрации / входа пользователя)?

3 ответа

Безопасность Spring, насколько я знаю, безопасность "низкого уровня": то есть она используется для предотвращения пользователей с недостаточной авторизацией для доступа к ресурсам веб-приложений, таким как доступ к частям кода или веб-страниц или ресурсов других веб-приложений. ". Регистрация пользователя, CAPTCHA, которую вы, вероятно, могли бы реализовать самостоятельно (возможно, взяв существующие компоненты / библиотеки, например /questions/24723473/integratsiya-kapchi-s-spring-security/24723479#24723479 для CAPTCHA и т. Д.), И самостоятельно интегрировать ее с Spring Security.

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

Но для Java Spring Security кажется наиболее широко развернутым решением, поскольку оно очень настраиваемо - вы можете, например, настроить его для хранения пользователей в базе данных или LDAP, предоставления доступа на основе ролей или списков контроля доступа и так далее.

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

Примером такого сервиса является mailjet.

Одно из преимуществ использования полного стека, такого как Vaadin, заключается в том, что эта среда будет использовать для вас большинство передовых методов OWASP, таких как установка токенов CSRF или избежание внедрения сценария с правильным экранированием и т. Д.

Это помогает несколько компенсировать недостаток гибкости, который обычно меньше, чем может показаться. Например, в Spring MVC почти все подключаемо, в Vaadin, если вам не нравится данный виджет, вы можете настроить его и написать свой.

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

Некоторые из аспектов, которые отличают эти технологии:

  • Использует ли конкретная технология "привязывает" вас к ней

  • Сколько нужно сделать на заказ.

  • Масштаб и объем, который может поддерживать технология, и усилия, необходимые для ее достижения.

технологии

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

  • Apache-Shiro довольно надежен и предоставляет очень хороший уровень абстракции с более слабой связью, он интегрируется со многими другими технологиями, включая безопасность пружин, и обеспечивает интеграцию веб-интерфейса с JSF.

  • PicketLink - это очень мощная технология с множеством функций безопасности, но она может быть не такой "под ключ", как Shiro или Spring, если вы думаете, что в будущем вы захотите, чтобы ваша инфраструктура безопасности была корпоративного уровня и реализовала такие функции, как IDP . Picketlink может быть очень хорошим выбором для дальнейшего развития.

Другие вопросы по тегам