美文网首页
Spring Cloud Zuul 过滤器

Spring Cloud Zuul 过滤器

作者: 歌哥居士 | 来源:发表于2019-03-27 07:13 被阅读0次
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.ServletRequestBindingException;
import org.springframework.web.bind.ServletRequestUtils;

/**
 * 自定义一个过滤器,请求中有accessToken就放行,否则返回401
 */
@Component
public class AccessFilter extends ZuulFilter {

    /**
     * pre:可以在请求被路由之前调用:身份认证、集群中选择请求的微服务、记录调试信息。
     * routing:在路由请求时候被调用。
     * post:在routing和error过滤器之后被调用:添加标准HTTP header。
     * error:处理请求时发生错误时被调用。
     */
    @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();
        try {
            String accessToken = ServletRequestUtils.getStringParameter(ctx.getRequest(), "accessToken");
            if (null != accessToken) { // 通过
                System.out.println("通过...");
                return null;
            }
        } catch (ServletRequestBindingException e) {
            e.printStackTrace();
        }
        System.out.println("没有accessToken");
        ctx.setSendZuulResponse(false); // 停止路由
        ctx.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
        return null;
    }
}

访问:http://localhost:11000/provider/m1?accessToken=1

相关文章

网友评论

      本文标题:Spring Cloud Zuul 过滤器

      本文链接:https://www.haomeiwen.com/subject/dchhvqtx.html