Spring Security 3.1 имеет изящный и удобный способ включить желаемый хеш в конфигурацию XML, который работает как чудо:
<bean id="securityDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/myDataSource"/>
<property name="resourceRef" value="true"/>
</bean>
<bean id="encoder" class="org.springframework.security.crypto.password.StandardPasswordEncoder" />
<security:authentication-manager>
<security:authentication-provider>
<security:password-encoder ref="encoder" />
<security:jdbc-user-service
data-source-ref="securityDataSource"
authorities-by-username-query="SELECT username, authority FROM user_roles WHERE username = ?"
users-by-username-query="SELECT username, password, enabled FROM users WHERE username = ?"
/>
</security:authentication-provider>
</security:authentication-manager>
Я взглянул на этот класс StandardPasswordEncoder, который имеет два применимыхпубличные методы: encode () и match ().Метод match () предположительно используется Spring для сравнения хешированной версии введенного пароля с хешированным паролем в базе данных.Кажется, что метод encode () используется для генерации хешированной строки для хранения в базе данных.Я предполагаю, что вы можете использовать это для генерации или изменения пароля по желанию.
Мой вопрос таков: учитывая вполне законную причину этого, насколько трудно (или вообще возможно) заменить егоэтот хеш с двусторонним методом шифрования?Я не хочу жертвовать всей мощью и удобством, которые предлагает эта весенняя конфигурация безопасности, но необходимо (для бизнес-пользователей) иметь доступ к простому текстовому паролю по желанию.