#### 接口安全鉴权
- 场景举例
> 我们支付项目部通常写的接口是给予其他部门调用,但是由于没有权限这方面的校验,使得每个人都可以无限调用接口,有可能造成项目莫名其妙的错误,所以增加权限校验是很有必要的
- 大致思路
> 如果有人需要调用接口,在后台进行动态生成一个token给予访问资格
- 增加过滤器MyFilter.java,需要继承其ZuulFilter
```
package com.dg.sc.zuul.filter;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
/**
* @Author xietianhua
* @Create 2019-06-12 14:52
**/
@Component
public class MyFilter extends ZuulFilter{
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 0;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() throws ZuulException {
// 权限校验
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
String accessToken = String.valueOf(request.getParameter("Token"));
if(!accessToken.equals("mytoken") || StringUtils.isEmpty(accessToken)) {
ctx.setSendZuulResponse( false );
ctx.setResponseStatusCode( 401 ); // 设置其返回代码
return null;
}
return null;
}
}
```
- 在run方法里面,可以写权限校验逻辑,大致思路把token存到Redis中,设置过期时间即可
- 测试运行,没有加token,会返回401错误,之前我们设置返回401
![](https://box.kancloud.cn/6787201f10fd3805d3ee6962b1ed00fc_725x397.png)
- 加上正确的token信息,才可以访问
![](https://box.kancloud.cn/f58c959bd1d99e3b5353a3836eff33d0_886x114.png)