Zuul 请求过滤

请求过滤的本质就是对接口的访问权限进行限制,实现的思路大致有以下几种:
	1.为每个服务写一套校验签名和鉴别权限的过滤器和拦截器。(代码是真的冗余)。
	2. 将校验权限剥离,构成一个独立的鉴权服务。(换汤不换药,还是代码冗余)。
	3. 在API网关中实现对客户端请求的校验。(请求过滤)。

如何实现

实现ZuulFilter

package com.bobo.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 javax.servlet.http.HttpServletRequest;

/**
 * 请求过滤
 * @author [email protected]
 * @create 2018-10-29 9:54
 **/
public class TokenFilter extends ZuulFilter{

    /**
     * 过滤器的类型,决定了过滤器会在请求的那个生命周期中执行,
     *一共有四种类型
     * pre:可以在请求被路由之前调用
     * route:在路由请求时候被调用
     * post:在route和error过滤器之后被调用
     * error:处理请求时发生错误时被调用
     * @return
     */
    @Override
    public String filterType() {
        return "pre";
    }

    /**
     * 过滤器的执行顺序,当请求在一个阶段中存在多个过滤器的时候
     * 需要根据该方法返回的值来一次执行。
     * @return
     */
    @Override
    public int filterOrder() {
        return 1;
    }

    /**
     * 判断该过滤器是否需要执行,如果返回true,
     * 那么该过滤器对所有的请求 都会生效
     * @return
     */
    @Override
    public boolean shouldFilter() {
        return true;
    }

    /**
     * 过滤器的具体逻辑,可以通过 requestContext.setSendZuulResponse(false);来过滤请求,
     * 不对其进行路由。
     * @return
     * @throws ZuulException
     */
    @Override
    public Object run() throws ZuulException {
        RequestContext requestContext = RequestContext.getCurrentContext();
        HttpServletRequest request = requestContext.getRequest();
        String token = request.getParameter("token");
        if (StringUtils.isBlank(token)) {
            requestContext.setSendZuulResponse(false);
            requestContext.setResponseStatusCode(401);
            return null;
        }
        return null;
    }
}

配置Filter

package com.bobo;

import com.bobo.filter.TokenFilter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.context.annotation.Bean;

@EnableZuulProxy
@SpringBootApplication
public class GetewayApiApplication {

	public static void main(String[] args) {
		SpringApplication.run(GetewayApiApplication.class, args);
	}

	@Bean
	public TokenFilter tokenFilter() {
		return new TokenFilter();
	}
}

启动eureka、eureka-server 、feign-comsumer、gateway-api这四个项目

		如果大家对项目不知道,可以去访问我的git地址[springCloudgit地址](https://github.com/wuxiaobocom/springCloud)。
		eureka中心是这样的:

Spring Cloud Zuul请求过滤

在请求中不加入token,请求是这样的:

Spring Cloud Zuul请求过滤

加入token是这样子滴:

Spring Cloud Zuul请求过滤

相关文章:

  • 2021-05-18
  • 2022-02-14
  • 2021-09-04
  • 2022-01-02
  • 2020-02-21
  • 2021-12-27
  • 2021-09-02
  • 2021-11-17
猜你喜欢
  • 2022-12-23
  • 2021-07-10
  • 2021-05-12
  • 2019-12-03
  • 2018-05-06
  • 2021-10-17
  • 2021-07-02
相关资源
相似解决方案