Можно ли использовать управляемую контейнером аутентификацию с получением пароля?

Я знаю, как настроить управляемую контейнером безопасность, которая использует аутентификацию по форме и использует переваренные пароли (скажем, 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 здесь.

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