Я пытаюсь выяснить, как работают флаги модуля входа в JAAS (используя JBoss 5.1 EAP), и я столкнулся с удивительной ситуацией, которую, надеюсь, кто-то сможет прояснить для меня.
Для фона мой login-config.xml выглядит так:
<authentication-policy>
<authentication>
<login-module code="...loginModule1" flag="sufficient">
...
</login-module>
<login-module code="...loginModule2" flag="optional">
...
</login-module>
<login-module code="...loginModule3" flag="optional">
...
</login-module>
</authentication>
</authentication-policy>
В этом случае loginModule1 является автономным, но loginModule2 зависит от loginModule3. У меня проблема в том, что если loginModule1 завершается неудачно, а loginModule2 и loginModule3 оба успешно, я все равно получаю неудачный вход в систему. Если я изменю loginModule1 на необязательный, то при сбое loginModule1 и успешном выполнении 2 и 3 я получаю успешную регистрацию.
Из документации по безопасности JBoss (http://docs.jboss.org/jbossas/admindevel326/html/ch8.chapter.html):
sufficient: the LoginModule is not required to succeed. If it does succeed,
control immediately returns to the application (authentication does not proceed
down the LoginModule list). If it fails, authentication continues down the
LoginModule list.
Я бы подумал, исходя из этого, что когда LoginModule с достаточным флагом завершится неудачно, но следующий LoginModule пройдет, я получу успешный вход, кто-нибудь знает, почему это не так?