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

2020-03-01 16:02:49来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

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
 

就酱。


原文链接:https://www.cnblogs.com/notayeser/p/12390280.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:多线程笔记 - AIO

下一篇:Shiro -- (七) Web 集成