【问题标题】:Zuul: How to get path variables from requestZuul:如何从请求中获取路径变量
【发布时间】:2019-02-28 12:19:48
【问题描述】:

使用 Zuul,如何在给定以下 URL 的情况下提取路径变量(customerIdagreementId):

客户/{customerId}/agreements/{agreementId}

我可以使用 Zuul 或 Eureka 以某种方式获取路径变量的引用名称,还是需要使用 RegEx 或类似的东西?

【问题讨论】:

  • zuul 用于代理。所以你应该将请求导航到restcontroller。和 customerid 等不应该是路由的逻辑属性。所以你应该在控制器上解析路径变量。
  • 是的,我们当然是在控制器级别解析路径变量。但我想在将请求传递给 API 之前验证 Zuul 网关服务中的 customerId 和 agreementId。
  • 所以,您可以在网关服务中实现您的javax.servlet.Filter,并在doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain) { ... } 方法中对传入请求进行一些逻辑
  • 我知道如何使用 Zuul 实现自定义过滤器,但我想通过引用它们来访问路径变量。该链接仅包含创建过滤器的通用指南,但没有回答我的问题。

标签: java spring-boot netflix-eureka netflix-zuul


【解决方案1】:

RegEx 绝对是探索的选项之一

【讨论】:

  • 我更希望能够按名称引用路径变量,所以对我来说 RegEx 不是最佳选择。
【解决方案2】:

您可以添加一个过滤器,该过滤器将在您的请求实际发送到控制器之前使用。

您可以像这样从 HttpServletRequest 中提取路径变量:

Map<String, String> pathVariables = (Map<String, String>) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);

【讨论】:

  • 在我的情况下返回 null 。 RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest 请求 = ctx.getRequest(); Map pathVariables = (Map) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE); System.out.println(pathVariables);
  • 我也变空了。你找到解决办法了吗?
  • 有什么解决办法吗?
【解决方案3】:

我最近也有这样的需求,正在研究如何解决这个问题,你可以参考Spring Core中的AntPathMatcher类,也许对你有帮助

【讨论】:

    猜你喜欢
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 2016-08-03
    相关资源
    最近更新 更多