Obligar al usuario a cambiar la contraseña expirada en Spring Security

Estoy construyendo mvc de muelles y aplicaciones basadas en web basadas en seguridad de muelles.

He implementado la funcionalidad Restablecer contraseña. El administrador del sistema restablecerá la contraseña de cualquier usuario. La contraseña generada al azar se enviará por correo electrónico al usuario y se actualizará en la base de datos.

Ahora quiero que cada vez que el usuario inicie sesión con una contraseña generada al azar, quiero obligar al usuario a cambiar su contraseña.

Por favor, eche un vistazo a miusuari MESA

userid bigint (20)
username varchar (20)
password varchar (65)
email varchar (50)
firstname varchar (20)
lastname varchar (20)
groupname varchar (50)
enabled tinyint (1)
credentialsNonExpired tinyint (1)

MY Proveedor de autenticación

    <!--
        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>

He utilizado JDBCUserDetailsService extendiendo JDBCDaoImpl como jdbcUserService.

Quiero establecer credentialNonExpired a la columna falsa de mi tabla de usuario cuando restablezco la contraseña.

Soy capaz de hacer eso.

Pero cuando inicio sesión, spring securityJDBCuserdetailsservice loadUserbyUsername obteniendo solo nombre de usuario, contraseña, columnas habilitadas y el resto de todos los campos establecidos en verdadero.

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);
        }

    });
}

Pero quiero real credentialNonExpired campo que se establece mediante restablecer contraseña, para que la seguridad de primavera arroje CREDENTIALEXPIREDEXCEPTION.

Lo estoy logrando al cargar el método anterior, pero ¿hay alguna otra forma de redirigir al usuario para que cambie la página de contraseña cuando inician sesión con la contraseña caducada?

Dime, ¿cómo puedo hacer eso?

Respuestas a la pregunta(4)

Su respuesta a la pregunta