quan-crypto
大约 2 分钟自定义工具配置登录凭证密码
基于Shiro
中的凭证工具类封装的密码生成工具,可以实现自定义算法加密密码。提高了普通密码的安全性。
在验证密码时,可以自定义凭证校验处理器RetryLimitHashedCredentialsMatcher
;比如密码校验失败后的处理策略等。
当前工具实现了登录失败次数的校验,当调用PasswordService#verify()
方法时生效,详细配置请查看配置说明
使用方法
引入工具依赖包
gradle
dependencies {
api project(':quan-tools:quan-crypto')
}
yml配置:
quan:
crypto:
timeOut: 3600
retryCount: 5
algorithmName: md5
hashIterations: 3
realmName: quan
配置说明
timeOut
- 类型:
long
- 默认:
3600
默认缓存过期时间,配置密码校验次数的缓存时间,单位:秒
retryCount
- 类型:
int
- 默认:
5
重试次数,当登录密码校验错误后,允许的重试次数。 当同一账号密码校验超过该次数时,将锁定该账号的登录操作。
锁定时间=登录失败重试的次数 * 缓存过期时间(timeOut
)
algorithmName
- 类型:
string
- 默认:
md5
加密方式,配置密码加密的方式
hashIterations
- 类型:
int
- 默认:
3
迭代次数,使用给定的盐对所提供的凭证进行哈希的次数
realmName
- 类型:
string
- 默认:
quan
加密主体的名称
工具类说明-PasswordService
encryptPassword
根据账号和密码等信息,生成校验凭证。
请求参数:
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
account | String | 是 | 登录账号 |
password | String | 是 | 登录密码 |
salt | String | 否 | 加盐(执行方法后,自动注入该参数) |
secret | String | 否 | 凭证(执行方法后,自动注入该参数) |
返回参数: 无
该方法会注入请求参数中的salt
和secret
参数值。
verify
用于登录凭证校验。
请求参数:
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
account | String | 是 | 登录账号 |
password | String | 是 | 登录密码 |
salt | String | 是 | 盐 |
secret | String | 是 | 凭证 |
ip | String | 否 | 用户登录IP |
返回参数:
- true:校验成功
- false:校验失败
生成密码凭证示例
@RequiredArgsConstructor
@Component
public class Test {
/**
* Spring注入方式
*/
private final PasswordService passwordService;
public PageResult<SysUserAccountPO> generatePasswordTest(String account, String password) {
// 生成登录凭证
CryptoParam cryptoParam = passwordService.encryptPassword(account, password);
String salt = cryptoParam.getSalt();
String secret = cryptoParam.getSecret();
System.out.println(salt);
System.out.println(secret);
// 校验登录凭证
// 初始化校验参数
cryptoParam.setAccount(account);
cryptoParam.setPassword(password);
cryptoParam.setIp("127.0.0.1");
cryptoParam.setSalt(salt);
cryptoParam.setSecret(secret);
// 验证密码(true:验证通过,false:验证失败)
boolean verify = passwordService.verify(cryptoParam);
}
/**
* 直接运行方式
* 一般应用于测试用例或手动生成账号登录凭证
*/
public static void main(String[] args) {
PasswordService passwordService = new PasswordService(null, new CryptoProperties());
// 传入账号、明文登录密码
CryptoParam cryptoParam = passwordService.encryptPassword("super", "123456");
System.out.println(cryptoParam.toString());
}
}
从CryptoParam
中获取salt
和secret
,然后修改sys_user_account
对应的salt
和secret
即可。