mirror of
https://gitee.com/durcframework/SOP.git
synced 2025-08-11 21:57:56 +08:00
网关可校验token
This commit is contained in:
54
doc/docs/files/10089_自定义校验token.md
Normal file
54
doc/docs/files/10089_自定义校验token.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# 自定义校验token(2.5.0)
|
||||
|
||||
从2.5.0开始在`@ApiMapping`注解中新增了一个属性`needToken`,用来告诉网关是否校验token
|
||||
|
||||
```java
|
||||
/**
|
||||
* 是否需要appAuthToken,设置为true,网关端会校验token是否存在
|
||||
*/
|
||||
boolean needToken() default false;
|
||||
```
|
||||
|
||||
使用方式:
|
||||
|
||||
```java
|
||||
@ApiMapping(value = "story.token.get", needToken = true/* 设置true,网关会校验token是否存在 */)
|
||||
public StoryResult token(StoryParam story) {
|
||||
OpenContext openContext = ServiceContext.getCurrentContext().getOpenContext();
|
||||
String appAuthToken = openContext.getAppAuthToken();
|
||||
StoryResult result = new StoryResult();
|
||||
result.setName("appAuthToken:" + appAuthToken);
|
||||
return result;
|
||||
}
|
||||
```
|
||||
|
||||
指定了needToken=true后,网关会判断客户端是否传了`app_auth_token`参数,没有传则返回错误信息。
|
||||
|
||||
网关默认简单校验参数值是否存在,如果要校验有效性,需要自己实现。
|
||||
|
||||
自己实现步骤:
|
||||
|
||||
- 在ZuulConfig类中重写`doAfter`方法
|
||||
- 设置`ApiConfig中的tokenValidator属性`
|
||||
|
||||
`TokenValidator`是一个函数式接口,可以直接使用Lambda表达式,示例代码如下:
|
||||
|
||||
```java
|
||||
public class ZuulConfig extends AlipayZuulConfiguration {
|
||||
|
||||
@Override
|
||||
protected void doAfter() {
|
||||
ApiConfig.getInstance().setTokenValidator(apiParam -> {
|
||||
// 获取客户端传递过来的token
|
||||
String token = apiParam.fetchAccessToken();
|
||||
if (StringUtils.isBlank(token)) {
|
||||
return false;
|
||||
}
|
||||
// TODO: 校验token有效性,可以从redis中读取
|
||||
|
||||
// 返回true表示这个token真实、有效
|
||||
return true;
|
||||
});
|
||||
}
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user