《Spring Security3》第四章第三部分翻译上(密码加salt)(转载)
《Spring Security3》第四章第三部分翻译下(密码加salt)(转载)你是否愿意在密码上添加点salt???【需要记住的
《Spring Security3》第四章第三部分翻译下(密码加salt)(转载)
你是否愿意在密码上添加点salt?
?
?【需要记住的是salt被添加到明文的密码上,所以salt不能进行单向的加密,因为应用要查找用户对应的salt值以完成对用户的认证。】
?让我们通过配置ReflectionSaltSource实现salt密码,增加密码安全的等级。
声明SaltSource Spring bean
public?class?CustomJdbcDaoImpl?extends?JdbcDaoImpl?{????public?void?changePassword(String?username,?String?password)?{??getJdbcTemplate().update(??????"UPDATE?USERS?SET?PASSWORD?=???WHERE?USERNAME?=??"????????password,?username);??}??@Override??protected?UserDetails?createUserDetails(String?username,????????????UserDetails?userFromUserQuery,????????????List<GrantedAuthority>?combinedAuthorities)?{????????????String?returnUsername?=?userFromUserQuery.getUsername();????????????if?(!isUsernameBasedPrimaryKey())?{????????????????returnUsername?=?username;????????}????return?new?SaltedUser(returnUsername,???????userFromUserQuery.getPassword(),userFromUserQuery.isEnabled(),??????true,?true,?true,?combinedAuthorities,???????((SaltedUser)?userFromUserQuery).getSalt());??}??@Override??protected?List<UserDetails>?loadUsersByUsername(String?username)?{????????return?getJdbcTemplate().?????????query(getUsersByUsernameQuery(),?????????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);???????????????String?salt?=?rs.getString(4);???????????????return?new?SaltedUser(username,?password,???????????????????enabled,?true,?true,?true,??????????????????AuthorityUtils.NO_AUTHORITIES,?salt);??????????????}??????????});????}??}??
?createUserDetails和loadUsersByUsername重写了父类的方法——与父类不同的地方在代码列表中已经着重强调出来了。添加了这些变化,你可以重启应用并拥有了更安全、随机的salt密码。你可能会愿意加一些日志和实验,以查看应用运行期间和启动时用户数据加载时的加密数据变化。
???????? 要记住的是,尽管在这个例子中说明的是为UserDetails添加一个简单域的实现,这种方式可以作为基础来实现高度个性化的UserDetails对象以满足应用的业务需要。对于JBCP Pets来说,审计人员会对数据库中的安全密码感到很满意——一项任务被完美完成。