Files
SOP/doc/docs/files/10089_自定义校验token.md
2019-10-26 15:54:48 +08:00

1.7 KiB
Raw Blame History

自定义校验token2.5.0

从2.5.0开始在@ApiMapping注解中新增了一个属性needToken用来告诉网关是否校验token

/**
* 是否需要appAuthToken设置为true网关端会校验token是否存在
*/
boolean needToken() default false;

使用方式:

@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表达式示例代码如下

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;
        });
    }
}