Spring Cloud Zuul 过滤器拆分serivceId和请求路径

由于项目所需,需要在Zuul网关中解析请求URL,将URL中路由服务的部分和真实请求路径分离开。

localhost:8080/serviceA/api/xxx –> /api/xxx

这个功能比较简单,可以用String API轻松实现,但也可以用Spring-Web内置工具来解决。

Talk is cheap,show me the code.

关键的组件是 RouteLocatorUrlPathHelper ,前者通过注入,后者可以实例化为私有变量

@Component
@Slf4j
public class ResourceFilter extends ZuulFilter {

    @Autowired
    private RouteLocator routeLocator;

    private final UrlPathHelper pathHelper = new UrlPathHelper();

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

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

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

    @Override
    public Object run() throws ZuulException {
        //获取当前请求
        HttpServletRequest request = RequestContext.getCurrentContext().getRequest();

        log.info("current url {}", request.getRequestURL().toString());

        //解析Zuul路由对象
        Route matchingRoute = routeLocator.getMatchingRoute(pathHelper.getPathWithinApplication(request));

        //matchingRoute.getId() -> 当前路由服务名,即service-id
        //matchingRoute.getPath() -> 摘除service-id后的请求路径
        log.info("current serviceId : {} , request path : {}", matchingRoute.getId(), matchingRoute.getPath());
        return null;
    }
}

输出:
 current url http://localhost:8080/serviceA/api/xxx

 current serviceId : serviceA , request path : /api/xxx

就酱。

Original: https://www.cnblogs.com/notayeser/p/12390280.html
Author: d1zzyboy
Title: Spring Cloud Zuul 过滤器拆分serivceId和请求路径

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/572140/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球