网关可校验token

This commit is contained in:
tanghc
2019-10-26 15:54:48 +08:00
parent 530a92a3ea
commit a08313ea81
33 changed files with 293 additions and 116 deletions

View File

@@ -0,0 +1,54 @@
# 自定义校验token2.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;
});
}
}
```