Я создаю Spring MVC и Spring Security на основе веб-приложения.
Я реализовал функцию сброса пароля. Системный администратор сбросит пароль любого пользователя. Сгенерированный случайным образом пароль будет отправлен пользователю по электронной почте, и он будет обновлен в базе данных.
Теперь я хочу, чтобы всякий раз, когда пользователь входил в систему со случайно сгенерированным паролем, я хотел заставить пользователя сменить свой пароль.
Пожалуйста, взгляните на моего пользователя TABLE.
идентификатор пользователя bigint (20)
имя пользователя varchar (20)
пароль varchar (65)
электронная почта varchar (50)
имя varchar (20)
фамилия варчар (20)
название группы varchar (50)
включен tinyint (1)
учетные данныеNonExpired tinyint (1)
МОЙ поставщик аутентификации
<!--
Configuring Authentication Provider to make use of spring security
provided Jdbc user management service
-->
<authentication-provider user-service-ref="jdbcUserService">
<!--
Configuring SHA-1 Password Encoding scheme to secure user credential
-->
<password-encoder ref="sha1PasswordEncoder" />
</authentication-provider>
</authentication-manager>
Я использовал JDBCUserDetailsService расширение JDBCDaoImpl как jdbcUserService .
Я хочу установить credentialNonExpired в ложный столбец моей пользовательской таблицы при сбросе пароля.
Я могу это сделать.
Но при входе в систему пружина безопасности JDBCuserdetailsservice loadUserbyUsername получает только имя пользователя, пароль, включенные столбцы и остальные поля, равные true.
protected List<UserDetails> loadUsersByUsername(String username) {
return getJdbcTemplate().query(usersByUsernameQuery, new String[] {username}, new RowMapper<UserDetails>() {
public UserDetails mapRow(ResultSet rs, int rowNum) throws SQLException {
String username = rs.getString(1);
String password = rs.getString(2);
boolean enabled = rs.getBoolean(3);
return new User(username, password, enabled, true, true, true, AuthorityUtils.NO_AUTHORITIES);
}
});
}
Но я хочу фактическое credentialNonExpired поле, которое устанавливается паролем сброса, чтобы пружинная защита выдавала CREDENTIALEXPIREDEXCEPTION.
Я добиваюсь этого, загружая вышеуказанный метод, но есть ли другой способ перенаправить пользователя на страницу смены пароля при входе в систему с просроченным паролем.
Скажите, пожалуйста, как я могу это сделать?