【问题标题】:How to test the redirected routes with zuul routes filters in zuulProxy如何在 zuul Proxy 中使用 zuul 路由过滤器测试重定向路由
【发布时间】:2020-04-29 21:12:41
【问题描述】:

我正在关注这个链接。

https://stackoverflow.com/a/57611351/7103694

我缺少的是关于如何模拟我用于 zuul 代理的过滤器的部分。

这是我的错误日志。

com.netflix.zuul.exception.ZuulException: Filter threw Exception
...
Caused by: .com.demo.example.exception.AccessTokenMissingException: No access token found in request headers.

我有一个自定义预过滤器来检查授权标头。

public class PreRouteFilter extends ZuulFilter {

    @Override
    public String filterType() {
        return "pre";
    }

    @Override
    public int filterOrder() {
        return 1;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() throws ZuulException {


            RequestContext ctx = RequestContext.getCurrentContext();
            HttpServletRequest request = ctx.getRequest();
            String header = request.getHeader("Authorization");

            // Check header if it contain AUTHORIZATION key and value starting with "Bearer "
            if (header == null || !header.startsWith("Bearer ")) {
                ctx.set("error.status_code", HttpServletResponse.SC_UNAUTHORIZED);
                throw new AccessTokenMissingException("No access token found in request headers.");
            }

        return null;
    }
}

我通过这个配置添加了我的过滤器。

@Configuration
public class FilterConfig {

    @Bean
    public PreRouteFilter routeFilter() {
        return new PreRouteFilter();
    }
}

【问题讨论】:

    标签: unit-testing netflix-zuul


    【解决方案1】:

    在您的测试中,您需要创建一个请求并在其中为基于 Bearer 令牌的授权添加一个标头。 像这样的东西, 1.创建一个RequestContext,-

    RequestContext context = new RequestContext();

    1. 创建一个 MockHttpServletRequest 并向其添加 Auth 标头。
     MockHttpServletRequest httpRequest = new MockHttpServletRequest();
     httpRequest.setMethod("GET");
     String authHeader = "Bearer " + "your sample token string";
     httpRequest.addHeader("Authorization", authHeader);
     httpRequest.setRequestURI("/<whateverURI>");
    
    1. 在上下文中设置Http请求,
    context.setRequest(httpRequest);
    
    1. 将此上下文设置为当前测试上下文,
    RequestContext.testSetCurrentContext(context);
    
    1. 现在,您可以运行过滤器了,
    yourFilter.run();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-27
      • 2017-06-17
      • 2018-10-10
      • 2016-05-24
      • 2017-09-03
      • 1970-01-01
      • 2019-02-01
      • 2019-06-26
      相关资源
      最近更新 更多