Механизм пользовательской безопасности в приложении Java EE 6/7

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

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

Другими словами, я бы хотел, чтобы контейнер вызывал мои классы всякий раз, когда методы: вызываются аутентификация, логин и выход из системы.

Пример реализации: Метод HttpServletRequest.login будет успешно аутентифицировать только пользователей с четным числом букв при входе в систему.

Ответ 1

После прочтения JAAS вы должны реализовать свой модуль входа на основе org.jboss.security.auth.spi.AbstractServerLoginModule(из артефакта org.picketbox/picketbox maven). Затем разверните модуль с вашим приложением и создайте надлежащий домен и область безопасности в WildFly standalone.xml, например:

<security-domain name="myDomain" cache-type="default">
  <authentication>
    <login-module code="com.example.TestLoginModule" flag="required" 
module="deployment.sample.jar"/>
  </authentication>
</security-domain>

...

<security-realm name="MyRealm">
 <authentication>
   <jaas name="myDomain"/>
 </authentication>
</security-realm>

Следите за разным поведением в разных версиях JBoss AS. 7.1.1 не позволит вам развернуть модуль входа в систему, вам придется создать отдельный модуль jboss и связать его с модулями org.picketbox и jboss.security.

Дополнительное чтение: https://docs.jboss.org/author/display/WFLY8/Security+subsystem+configuration

https://docs.jboss.org/author/display/WFLY8/Security+Realms

http://java.dzone.com/articles/creating-custom-login-modules (он немного устарел, но дает основную идею)

Ответ 2

Я считаю, что контейнерный независимый способ сделать это - использовать JASPIC (JSR 196). К сожалению, он не выглядит простым, надежным или особенно хорошо документированным. Вот ссылка: http://arjan-tijms.blogspot.com/2012/11/implementing-container-authentication.html.

Ответ 3

Вы должны исследовать JAAS.

Википедия дает хороший обзор: http://en.m.wikipedia.org/wiki/Java_Authentication_and_Authorization_Service

Это предоставит вам всю информацию и учебные пособия: http://docs.oracle.com/javase/7/docs/technotes/guides/security/

Учебное пособие с примером приложения: http://download.java.net/jdk8/docs/technotes/guides/security/jaas/tutorials/GeneralAcnOnly.html

И проверьте это в SO: JAAS для людей