Механизм пользовательской безопасности в приложении 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 для людей