自定义校验 token
优质
小牛编辑
123浏览
2023-12-01
在@Open
注解中有一个属性needToken
,用来告诉网关是否校验token
/**
* 是否需要appAuthToken,设置为true,网关端会校验token是否存在
*/
boolean needToken() default false;
使用方式:
@ApiOperation(value="传递token", notes = "传递token")
@Open(value = "story.get.token", needToken = true/* 设置true,网关会校验token是否存在 */)
@RequestMapping("token")
public StoryResult token(StoryParam story, HttpServletRequest request) {
OpenContext openContext = ServiceContext.getCurrentContext().getOpenContext();
StoryResult result = new StoryResult();
result.setName("appAuthToken:" + openContext.getAppAuthToken());
return result;
}
指定了needToken=true后,网关会判断客户端是否传了app_auth_token
参数,没有传则返回错误信息。
网关默认简单校验参数值是否存在,如果要校验有效性,需要自己实现。
自己实现步骤:
- 设置
ApiConfig中的tokenValidator属性
TokenValidator
是一个函数式接口,可以直接使用Lambda表达式,示例代码如下:
@Component
public class MyConfig {
@PostConstruct
public void after() {
ApiConfig.getInstance().setTokenValidator(apiParam -> {
// 获取客户端传递过来的token
String token = apiParam.fetchAccessToken();
return !StringUtils.isBlank(token);
// TODO: 校验token有效性,可以从redis中读取
// 返回true表示这个token真实、有效
});
}
}