Можно ли использовать управляемую контейнером аутентификацию с получением пароля?
Я знаю, как настроить управляемую контейнером безопасность, которая использует аутентификацию по форме и использует переваренные пароли (скажем, SHA-256). Что-то вроде этого:
web.xml
<login-config>
<auth-method>FORM</auth-method>
<realm-name>jdbc</realm-name>
<form-login-config>
<form-login-page>/login.jsf</form-login-page>
<form-error-page>/login-error.jsf</form-error-page>
</form-login-config>
</login-config>
login.xhtml
<form action="j_security_check">
<p><label>
Username:<br/>
<input type="text" name="j_username" />
</label></p>
<p><label>
Password:<br/>
<input type="password" name="j_password" />
</label></p>
<p>
<button type="submit">Submit</button>
</p>
</form>
Довольно чертовски просто - но то, что я действительно хотел бы сделать, это засолить пароль глобальной солью и именем пользователя. Да, я знаю, что это не идеально, но сейчас я просто создаю подтверждение концепции.
Может ли контейнер (в данном случае GlassFish 3) сделать это для меня, или я должен написать свой собственный фильтр входа? Я делал это раньше (для приложений J2EE), но моя интуиция говорит мне, что теперь, когда я использую Java EE 6, должен быть более жесткий способ сделать это.
1 ответ
У меня такое ощущение, что вы ищете быстрый (и потенциально грязный?) Способ изменения встроенного поставщика аутентификации.
Правильный путь - это реализовать свой собственный поставщик услуг аутентификации Java для нового API JASPIC ( JSR-196). Это более трудоемко, но этот метод позволяет вам развернуть реализацию так, как вам нравится, и она должна быть совместима с любым сервером приложений Java EE 6.
Для базовой схемы аутентификации с получением пароля, реализация такого провайдера должна быть довольно простой. Вам придется подумать об управлении пользователями и паролями, но одним из решений может быть предоставление вашему провайдеру возможности повторно использовать пользователей, определенных в областях аутентификации Glassfish, так что вам нужно только самостоятельно управлять пользовательскими солеными паролями.
Есть хороший учебник для WebSphere, который вы можете адаптировать для Glassfish здесь.