我正在构建基于网络的应用程序的spring mvc和spring security。
我已经实现了重置密码功能。系统管理员将重置任何用户的密码。随机生成的密码将通过电子邮件发送给用户,同样将在数据库中更新。
现在我希望每当用户使用随机生成的密码登录时,我想强制用户更改其密码。
请看看我的 用户 表。
userid bigint(20)
username varchar(20)
密码varchar(65)
email varchar(50)
firstname varchar(20)
lastname varchar(20)
groupname varchar(50)
启用tinyint(1)
credentialsNonExpired 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 由重置密码设置的字段,以便spring安全性将抛出CREDENTIALEXPIREDEXCEPTION。
我通过加载上面的方法实现了这一点,但是当用密码过期登录时,是否还有其他方法可以重定向用户更改密码页面。
请告诉我该怎么做?