Пароли Hash + Salt с использованием аутентификации / авторизации, управляемой контейнером

Я создал веб-приложение 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>

person Immer Alexis    schedule 05.03.2016    source источник
comment
Вы можете настроить realm для использования алгоритма дайджеста (SHA-512, MD5 или других ). Не знаю, как добавить к этому соль.   -  person Geinmachi    schedule 06.03.2016
comment
Еще вы могли бы использовать _ 1_. В основном вы избавляетесь от action="j_security_check" (j_username и j_password тоже не нужны - теперь вы можете использовать компоненты jsf, если хотите) и выполнить вход в систему программно. Вы привязываете логин и пароль к bean-компоненту, затем вы можете вычислить свой хеш с солью и отправить его вместо простого пароля. docs.oracle.com/javaee/6/tutorial/doc/glxce. html   -  person Geinmachi    schedule 06.03.2016
comment
Как все это связано с JSF? Страница формы представляет собой простой html, AA управляется контейнером ›Это даже не связано с java ... Добавьте тег вашего соответствующего контейнера (tomcat, jboss, что угодно) и удалите тег jsf   -  person Kukeltje    schedule 06.03.2016
comment
Спасибо, Гейнмачи; это именно то, что мне было нужно. Первоначально у меня создалось впечатление, что аутентификация и авторизация, управляемые контейнером, могут быть выполнены только с использованием метода j_security_check, при этом я не могу напрямую работать с переменными имени пользователя и пароля. Здравствуйте, Кукельтье, спасибо за ваше мнение. Это приложение было создано JSF 2.0 в контейнере приложений Tomcat; Я тоже обновил теги.   -  person Immer Alexis    schedule 08.03.2016