类 SaSignTemplate
java.lang.Object
cn.dev33.satoken.sign.SaSignTemplate
API 参数签名算法,在跨系统接口调用时防参数篡改、防重放攻击。
以 SSO 数据拉取为例,流程大致如下:
1. 以 md5( loginId={账号id}8nonce={随机字符串}8timestamp={13位时间戳}8key={secretkey秘钥} ) 生成签名 sign。
2. 将 sign 作为参数,拼接到请求地址后面,如:http://xxx.com?loginId=100018nonce=xxx8timestamp=xxx8sign=xxx。
3. 服务端接收到请求后,以同样的算法生成一次 sign 。
4. 对比两次 sign 是否一致,一致则通过,否则拒绝 。
- 从以下版本开始:
- 1.30.0
- 作者:
- click33
-
字段概要
字段 -
构造器概要
构造器 -
方法概要
修饰符和类型方法说明addSignParams(Map<String, Object> paramsMap) 给 paramsMap 追加 timestamp、nonce、sign 三个参数addSignParamsAndJoin(Map<String, Object> paramsMap) 给 paramsMap 追加 timestamp、nonce、sign 三个参数,并转换为参数字符串,形如:data=xxx8nonce=xxx8timestamp=xxx8sign=xxxvoidcheckNonce(String nonce) 校验:随机字符串 nonce 是否有效,如果无效则抛出异常。voidcheckParamMap(Map<String, String> paramMap) 校验:参数列表中的 nonce、timestamp、sign 是否均为合法的,如果不合法,则抛出对应的异常voidcheckRequest(SaRequest request, String... paramNames) 校验:一个请求的 nonce、timestamp、sign 是否均为合法的,如果不合法,则抛出对应的异常void校验:给定的参数 生成的签名是否为有效签名,如果签名无效则抛出异常voidcheckTimestamp(long timestamp) 校验:指定时间戳与当前时间戳的差距是否在允许的范围内,如果超出则抛出异常createSign(Map<String, ?> paramsMap) 创建签名:md5(paramsStr + keyStr)digestFullStr(String fullStr) 使用摘要算法创建签名获取:API 签名配置的秘钥获取:API 签名配置获取:API 签名配置: 1.booleanisValidNonce(String nonce) 判断:随机字符串 nonce 是否有效。booleanisValidParamMap(Map<String, String> paramMap) 判断:参数列表中的 nonce、timestamp、sign 是否均为合法的booleanisValidRequest(SaRequest request, String... paramNames) 判断:一个请求中的 nonce、timestamp、sign 是否均为合法的booleanisValidSign(Map<String, ?> paramsMap, String sign) 判断:给定的参数 生成的签名是否为有效签名booleanisValidTimestamp(long timestamp) 判断:指定时间戳与当前时间戳的差距是否在允许的范围内joinParams(Map<String, ?> paramsMap) 将所有参数连接成一个字符串(不排序),形如:b=28a=18c=3joinParamsDictSort(Map<String, ?> paramsMap) 将所有参数按照字典顺序连接成一个字符串,形如:a=18b=28c=3setSignConfig(SaSignConfig signConfig) 设置:API 签名配置splicingNonceSaveKey(String nonce) 拼接key:存储 nonce 时使用的 keytakeRequestParam(SaRequest request, String[] paramNames) 从请求中提取指定的参数
-
字段详细资料
-
key
-
timestamp
-
nonce
-
sign
-
-
构造器详细资料
-
SaSignTemplate
public SaSignTemplate() -
SaSignTemplate
构造函数- 参数:
signConfig- 签名参数配置对象
-
-
方法详细资料
-
getSignConfig
获取:API 签名配置- 返回:
- /
-
getSignConfigOrGlobal
获取:API 签名配置: 1. 如果用户自定义了 signConfig ,则使用用户自定义的。 2. 否则使用全局默认配置。- 返回:
- /
-
getSecretKey
获取:API 签名配置的秘钥- 返回:
- /
-
setSignConfig
设置:API 签名配置- 参数:
signConfig- /
-
joinParams
将所有参数连接成一个字符串(不排序),形如:b=28a=18c=3- 参数:
paramsMap- 参数列表- 返回:
- 拼接出的参数字符串
-
joinParamsDictSort
将所有参数按照字典顺序连接成一个字符串,形如:a=18b=28c=3- 参数:
paramsMap- 参数列表- 返回:
- 拼接出的参数字符串
-
createSign
创建签名:md5(paramsStr + keyStr)- 参数:
paramsMap- 参数列表- 返回:
- 签名
-
digestFullStr
使用摘要算法创建签名- 参数:
fullStr- 待摘要的字符串- 返回:
- 签名
-
addSignParams
给 paramsMap 追加 timestamp、nonce、sign 三个参数- 参数:
paramsMap- 参数列表- 返回:
- 加工后的参数列表
-
addSignParamsAndJoin
给 paramsMap 追加 timestamp、nonce、sign 三个参数,并转换为参数字符串,形如:data=xxx8nonce=xxx8timestamp=xxx8sign=xxx- 参数:
paramsMap- 参数列表- 返回:
- 加工后的参数列表 转化为的参数字符串
-
isValidTimestamp
public boolean isValidTimestamp(long timestamp) 判断:指定时间戳与当前时间戳的差距是否在允许的范围内- 参数:
timestamp- 待校验的时间戳- 返回:
- 是否在允许的范围内
-
checkTimestamp
public void checkTimestamp(long timestamp) 校验:指定时间戳与当前时间戳的差距是否在允许的范围内,如果超出则抛出异常- 参数:
timestamp- 待校验的时间戳
-
isValidNonce
判断:随机字符串 nonce 是否有效。 注意:同一 nonce 可以被多次判断有效,不会被缓存- 参数:
nonce- 待判断的随机字符串- 返回:
- 是否有效
-
checkNonce
校验:随机字符串 nonce 是否有效,如果无效则抛出异常。 注意:同一 nonce 只可以被校验通过一次,校验后将保存在缓存中,再次校验将无法通过- 参数:
nonce- 待校验的随机字符串
-
isValidSign
判断:给定的参数 生成的签名是否为有效签名- 参数:
paramsMap- 参数列表sign- 待验证的签名- 返回:
- 签名是否有效
-
checkSign
校验:给定的参数 生成的签名是否为有效签名,如果签名无效则抛出异常- 参数:
paramsMap- 参数列表sign- 待验证的签名
-
isValidParamMap
判断:参数列表中的 nonce、timestamp、sign 是否均为合法的- 参数:
paramMap- 待校验的请求参数集合- 返回:
- 是否合法
-
checkParamMap
校验:参数列表中的 nonce、timestamp、sign 是否均为合法的,如果不合法,则抛出对应的异常- 参数:
paramMap- 待校验的请求参数集合
-
isValidRequest
判断:一个请求中的 nonce、timestamp、sign 是否均为合法的- 参数:
request- 待校验的请求对象paramNames- 指定参与签名的参数有哪些,如果不填写则默认为全部参数- 返回:
- 是否合法
-
checkRequest
校验:一个请求的 nonce、timestamp、sign 是否均为合法的,如果不合法,则抛出对应的异常- 参数:
request- 待校验的请求对象paramNames- 指定参与签名的参数有哪些,如果不填写则默认为全部参数
-
takeRequestParam
从请求中提取指定的参数- 参数:
request- 请求对象paramNames- 指定的参数名称,不可为空,如果传入空数组则代表只拿 timestamp、nonce、sign 三个参数- 返回:
- 提取出的参数
-
splicingNonceSaveKey
拼接key:存储 nonce 时使用的 key- 参数:
nonce- nonce 值- 返回:
- key
-