salt, 盐, 用来做什么? 自己搜索下吧, 不解释这个基础的问题.
Spring Security中使用salt 有以下方式:
1.不使用 salt (强烈不推荐)
配置如下
使用 sha-256 加密
2.使用固定的salt 值 (不推荐)
配置如下
此处配置的固定值: my-salt
3.使用UserDetails中的一个属性值, 通过反射动态获取 (推荐)
配置如下
使用UserDetails中的username 属性的值为salt
4.自己实现 SaltSource.java 类,扩展性好 (推荐)
配置如下
使用扩展的 MySaltSource , 自定义实现,扩展性强
最佳使用实践
1. 使用UserDetails 的某一属性为salt的动态值 , 但这个属性不要与用户相关(如username), 比如定义一个 saltValue 属性, 每次创建时随机生成此值并存储,不修改.
2.扩展 SaltSource.java实现 , 比如使用两种加密算法去加密等.
另外
1. 对password的加密使用不可逆的算法实现, 如: SHA-XXX, MD5 , 不能使用可逆的加密, 如: AES
2. password是敏感数据, 切不可记录到日志中, 保存在许多地方等.