Когда перейти от управляемой контейнером безопасности к альтернативам, таким как Apache Shiro, Spring Security? - PullRequest
18 голосов
/ 16 октября 2011

Я пытаюсь защитить свое приложение, созданное с использованием JSF2.0.

Меня смущает вопрос, когда люди выбирают альтернативы безопасности, такие как Shiro, Spring Security или esapi owasp, оставляя позади управляемую контейнером безопасность,Посмотрев некоторые связанные вопросы о переполнении стека, где я понял, что безопасность на основе контейнеров в прошлом была более предпочтительной для разработчиков JSF.Но я также настоятельно рекомендовал использовать Apache Shiro.Я новичок в вопросах безопасности и не знаю, какие могут быть соответствующие проблемы и как их решать.Поэтому я ищу что-то, что решает большинство проблем безопасности через свои стандартные настройки / самостоятельно.

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

В таком случае, что, по вашему мнению, может быть хорошим вариантом для меня?

Я личноЯ убежден, что выбрал Shiro, поскольку он прост в использовании и заботится о большинстве вещей для новичка.

Ответы [ 3 ]

17 голосов
/ 16 октября 2011

Что мне нравится в Широ, так это то, что на самом деле легко настроить безопасность на основе разрешений. JAAS в значительной степени основан на ролях, что представляет собой гранулярность, которая по иронии судьбы более полезна для пользовательских веб-приложений, чем для корпоративных приложений (как мы можем заметить из ваших требований).

  • Обычно сервер приложений предоставляет некоторые службы поверх JAAS, такие как единый вход, встроенные модули входа в систему и т. Д., Поэтому иногда, когда детализация разрешений не требуется, вам следует перейти на JAAS.

  • В прошлый раз, когда я проверял, Широ также не поддерживал взаимную аутентификацию ssl (с использованием цифровых сертификатов), но вы, вероятно, не будете использовать это ...

  • Если вы используете Shiro, ваше приложение, вероятно, будет более переносимым между серверами приложений / сервлет-контейнерами (о, ирония судьбы!), Поскольку конфигурация безопасности JavaEE имеет тенденцию зависеть от поставщика для большинства нетривиальных установок.

В целом, исходя из указанных вами требований:

  • Использование AppServer (GlassFish, JBoss): JAAS (ootb authc / authz, встроенные модули входа в систему)
  • Использование контейнера сервлетов (Jetty / Tomcat): Shiro (проще в настройке и использовании)

Надеюсь, это поможет:)

4 голосов
/ 16 октября 2011

Я точно ничего не знаю об Apache Shiro, за исключением следующего, но то, что вы процитировали, практически дословно взято с их веб-страницы , которая содержит несколько неправильных утверждений, таких как '[JAAS] требовались статические определения, которые толькопрограммисты могут измениться », и« JAAS слишком сильно привязан к проблемам на уровне виртуальных машин », и подразумевается, что JAAS не касается пользователей и ролей, что просто неверно.Я бы хотел убедительно отойти от безопасности, управляемой контейнером.Это часть спецификации сервлета, поэтому он должен поддерживаться любым контейнером;это хорошо понято;поддерживается классами JDK без участия третьих лиц;... и у меня это работает; -)

1 голос
/ 28 декабря 2012

Я решил, что SpringSecurity (SS) станет нашей средой аутентификации и авторизации.Главным образом потому, что SS делает OpenID и OAuth.Мне придется настроить его, хотя для системы прав / группы / пользователя / сущности совсем немного.Я планирую выполнить авторизацию на уровне EntityManager / Entity, уровне обслуживания и уровнях Web / API.«Закрой дверь, но положи свои драгоценности в 3-тонный сейф в задней комнате». В последней половине Широ справляется НАМНОГО лучше.Но я не чувствую себя так комфортно, пытаясь интегрировать openid4j / openauth4j в Shiro.

Было бы ДЕЙСТВИТЕЛЬНО приятно выбирать и то, и другое, без какого-либо вмешательства или раздувания кода.Это лучший выбор.

PS, Spring предлагает множество других вещей, таких как интеграция с JSF, поэтому он очень привлекателен.

...