Принудительное изменение пользователем пароля с истекшим сроком в весенней безопасности

Я создаю Spring MVC и Spring Security на основе веб-приложения.

Я реализовал функцию сброса пароля. Системный администратор сбросит пароль любого пользователя. Случайно сгенерированный пароль будет отправлен пользователю по электронной почте, и он будет обновлен в базе данных.

Теперь я хочу, чтобы всякий раз, когда пользователь входил со случайно сгенерированным паролем, я хотел, чтобы пользователь изменил свой пароль.

Пожалуйста, посмотрите на мойпользователь ТАБЛИЦА.

идентификатор пользователя bigint (20)
имя пользователя varchar (20)
пароль varchar (65)
электронная почта varchar (50)
имя варчар (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.

Я добиваюсь этого, загружая вышеуказанный метод, но есть ли другой способ перенаправить пользователя на страницу смены пароля, когда он входит с просроченным паролем.

Пожалуйста, скажите мне, как я могу это сделать?

Ответы на вопрос(2)

Ваш ответ на вопрос