docs: api-sign 模块新增 @SaCheckSign 注解示例与多应用模式示例

This commit is contained in:
click33 2025-03-20 09:39:43 +08:00
parent b12b91e1ad
commit 4726544b85
2 changed files with 108 additions and 8 deletions

View File

@ -478,13 +478,112 @@ public SaResult addMoney(long userId, long money) {
}
```
完。
### 10、使用注解校验签名
`@SaCheckSign` 注解用于为一个接口提供签名校验,用于替代 `SaSignUtil.checkRequest(SaHolder.getRequest())`,示例如下:
``` java
// 校验全部参数:效果等同于 SaSignUtil.checkRequest(SaHolder.getRequest())
@SaCheckSign
@RequestMapping("test1")
public SaResult test1() {
// code ...
return SaResult.ok();
}
// 指定参与签名的参数有哪些:效果等同于 SaSignUtil.checkRequest(SaHolder.getRequest(), "id", "name");
@SaCheckSign(verifyParams = {"id", "name"})
@RequestMapping("test2")
public SaResult test2() {
// code ...
return SaResult.ok();
}
// 指定: 在多应用模式下,使用的 appid详情见下
@SaCheckSign(appid = "xm-shop")
@RequestMapping("test3")
public SaResult test3() {
// code ...
return SaResult.ok();
}
```
### 11、多应用模式
有时候我们可能需要同时与多个应用对接,每个应用都需要使用不同的秘钥:
首先在配置文件配置多个应用信息:
<!---------------------------- tabs:start ---------------------------->
<!------------- tab:yaml 风格 ------------->
``` yaml
sa-token:
# API 签名配置 多应用模式
sign-many:
# 应用1
xm-shop:
secret-key: 0123456789abcdefg
digest-algo: md5
# 应用2
xm-forum:
secret-key: 0123456789hijklmnopq
digest-algo: sha256
# 应用3
xm-video:
secret-key: 12341234aaaaccccdddd
digest-algo: sha512
```
<!------------- tab:properties 风格 ------------->
``` properties
# API 签名配置 多应用模式
# 应用1
sa-token.sign-many.xm-shop.secret-key=0123456789abcdefg
sa-token.sign-many.xm-shop.digest-algo=md5
# 应用2
sa-token.sign-many.xm-forum.secret-key=0123456789hijklmnopq
sa-token.sign-many.xm-forum.digest-algo=sha256
# 应用3
sa-token.sign-many.xm-video.secret-key=12341234aaaaccccdddd
sa-token.sign-many.xm-video.digest-algo=sha512
```
<!------------- tab:代码风格示例 ------------->
``` java
@Autowired
public void configSaToken(SaTokenConfig config) {
// API 签名配置 多应用模式
// 应用1
config.getSignMany().put("xm-shop", new SaSignConfig()
.setSecretKey("0123456789abcdefg") // 秘钥
.setDigestAlgo("md5") // 签名算法
);
// 应用2
config.getSignMany().put("xm-forum", new SaSignConfig()
.setSecretKey("0123456789hijklmnopq")
.setDigestAlgo("sha256")
);
// 应用3
config.getSignMany().put("xm-video", new SaSignConfig()
.setSecretKey("12341234aaaaccccdddd")
// 自定义签名算法示例
.setDigestMethod(fullStr -> {
return SaSecureUtil.sha384(fullStr);
})
);
}
```
<!---------------------------- tabs:end ---------------------------->
然后在签名时通过指定 appid 的方式获取对应的 SignTemplate 进行操作:
``` java
// 创建签名示例
String paramStr = SaSignMany.getSignTemplate("xm-shop").addSignParamsAndJoin(paramMap);
// 校验签名示例
SaSignMany.getSignTemplate("xm-shop").checkRequest(SaHolder.getRequest());
```

View File

@ -13,8 +13,9 @@
- `@SaCheckSafe`: 二级认证校验 —— 必须二级认证之后才能进入该方法。
- `@SaCheckHttpBasic`: HttpBasic校验 —— 只有通过 HttpBasic 认证后才能进入该方法。
- `@SaCheckHttpDigest`: HttpDigest校验 —— 只有通过 HttpDigest 认证后才能进入该方法。
- `@SaIgnore`:忽略校验 —— 表示被修饰的方法或类无需进行注解鉴权和路由拦截器鉴权。
- `@SaCheckDisable("comment")`:账号服务封禁校验 —— 校验当前账号指定服务是否被封禁。
- `@SaCheckSign`API 签名校验 —— 用于跨系统的 API 签名参数校验。
- `@SaIgnore`:忽略校验 —— 表示被修饰的方法或类无需进行注解鉴权和路由拦截器鉴权。
Sa-Token 使用全局拦截器完成注解鉴权功能,为了不为项目带来不必要的性能负担,拦截器默认处于关闭状态<br>
因此,为了使用注解鉴权,**你必须手动将 Sa-Token 的全局拦截器注册到你项目中**