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

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