Пользовательский механизм безопасности в приложении Java EE 6/7
Я хотел бы создать (реализовать самостоятельно) механизм аутентификации, который будет подключен к моему приложению Java EE.
Насколько я знаю, я должен реализовать LoginModule и каким-то образом связать эту реализацию с контейнерными механизмами. Но проблема в том, что я не знаю, как это сделать. Может быть, вы знаете, где я могу найти образец кода или учебник об этом?
Другими словами, я хотел бы заставить контейнер вызывать мои классы всякий раз, когда вызываются методы: authenticate, login и logout.
Пример реализации: метод HttpServletRequest.login успешно аутентифицирует только пользователей с четным числом букв в логине.
3 ответа
После прочтения о JAAS вы должны реализовать свой модуль входа в систему на основе org.jboss.security.auth.spi.AbstractServerLoginModule (из артефакта org.picketbox / picketbox maven). Затем разверните модуль вместе с вашим приложением и создайте соответствующий домен безопасности и область в standalone.xml WildFly, например:
<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 (немного устарела, но дает основную идею)
Я считаю, что контейнерно-независимый способ сделать это - использовать JASPIC (JSR 196). К сожалению, это не кажется простым, надежным или особенно хорошо документированным. Вот ссылка: http://arjan-tijms.blogspot.com/2012/11/implementing-container-authentication.html.
Вы должны исследовать 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 для людей