Я создал веб-приложение JSF, используя управляемую контейнером аутентификацию и авторизацию. Я определил ограничения безопасности, роль (роли) безопасности и конфигурацию входа в систему; Я предоставил приведенный ниже код, показывающий, как я определил все эти параметры. Все отлично работает; когда пользователь пытается получить доступ к «защищенным» веб-страницам, ему предлагается войти в систему, доступ предоставляется в случае успеха или отклоняется в случае неудачи. Поскольку пароли хранятся в виде открытого текста, вход в систему с функциональной аутентификацией, управляемой контейнером, работает нормально, когда пользователи также вводят пароли в виде обычного текста.
Как вы знаете, я не могу получить доступ / изменить / обработать пароли в виде обычного текста, введенные пользователем с использованием метода аутентификации FORM. Но я хочу хэшировать + солить мои пароли перед сохранением, но тогда вход в систему не будет работать, так как пользователи будут вводить простой текст, а база данных будет иметь хешированный + соленый пароль. Есть ли способ сохранить функциональность аутентификации и авторизации, управляемую контейнером, и по-прежнему использовать хеш-пароли + соль, если нет, как я могу? Поскольку аутентификация FORM не позволяет мне работать с паролем, введенным пользователем, я не могу его хэшировать + солить до того, как будет выполнено сравнение с паролем, сохраненным в базе данных. Если есть книга или блог, которые я могу прочитать, пожалуйста, направьте меня. Я тщательно искал в Интернете и не нашел ответа, который я понял.
<security-constraint>
<web-resource-collection>
<web-resource-name>Administrator Area</web-resource-name>
<url-pattern>/faces/administrator/*</url-pattern>
<url-pattern>/administrator/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>ADMINISTRATOR</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<role-name>ADMINISTRATOR</role-name>
</security-role>
Конфигурация входа в систему выглядит следующим образом:
<login-config>
<auth-method>FORM</auth-method>
<realm-name>DataSourceRealm</realm-name>
<form-login-config>
<form-login-page>/faces/login.xhtml</form-login-page>
<form-error-page>/faces/login.xhtml</form-error-page>
</form-login-config>
</login-config>
Страница входа выглядит следующим образом:
<form id="log_in_form" method="post" action="j_security_check">
User name: <input type="text" name="j_username"/>
Password: <input type="password" name="j_password"/>
<input type="submit" value="Login"/>
</form>
realm
для использования алгоритма дайджеста (SHA-512, MD5 или других ). Не знаю, как добавить к этому соль. - person Geinmachi   schedule 06.03.2016action="j_security_check"
(j_username
иj_password
тоже не нужны - теперь вы можете использовать компоненты jsf, если хотите) и выполнить вход в систему программно. Вы привязываете логин и пароль к bean-компоненту, затем вы можете вычислить свой хеш с солью и отправить его вместо простого пароля. docs.oracle.com/javaee/6/tutorial/doc/glxce. html - person Geinmachi   schedule 06.03.2016