首页 > 解决方案 > 如何使用 Apache Camel 3.x 重写 Urls?

问题描述

我正在将我的 Maven 构建的 Spring Boot 应用程序从 Apache Camel 2.24.3 升级到 3.8.0。此版本中已弃用的所有内容都已删除,包括 url 重写解决方案。我正在使用 camel-urlrewrite jar 来重写 url,这样我就可以独立于我正在调用的 3rd 方应用程序维护自己的 API。这个 jar 使用了另一个 jar:

<dependency>
  <groupId>org.tuckey</groupId>
  <artifactId>urlrewritefilter</artifactId>
  <version>4.0.3</version>
</dependency>

该解决方案将自身添加到 servlet 过滤器链中,并且在调用时将使用外部配置的 xml 文件来告诉它要重写哪些 url。

然后,此解决方案将在码头路线中使用#dslParm。

我尝试过自己配置 org.tukey 解决方案,但它从未由 Camel 触发。

@Configuration 公共类 UrlRewriteFilterConfig {

@Bean
public UrlRewriteFilter urlRewriteFilter(final ServletContext servletContext) throws ServletException {
    UrlRewriteFilter urlRewriteFilter = new UrlRewriteFilter();
    urlRewriteFilter.init(new FilterConfig() {
        private final Map<String, String> params = new HashMap<String, String>();
        {
            URL resource = ResourceHelper.class.getResource("/urlrewrite.xml");
            params.put("confPath", resource.getPath());
        }

        @Override
        public String getFilterName() {
            return "UrlRewriteFilter";
        }

        @Override
        public ServletContext getServletContext() {
            return servletContext;
        }

        @Override
        public String getInitParameter(String name) {
            return params.get(name);
        }

        @Override
        public Enumeration<String> getInitParameterNames() {
            return Collections.enumeration(params.keySet());
        }
    });

    return urlRewriteFilter;
}

@Bean
FilterRegistrationBean<UrlRewriteFilter> urlRewriteFilterFilterRegistrationBean(final UrlRewriteFilter filter) {
    final FilterRegistrationBean<UrlRewriteFilter> filterRegistrationBean = new FilterRegistrationBean<>();
    filterRegistrationBean.setFilter(filter);
    filterRegistrationBean.setEnabled(true);
    return filterRegistrationBean;
}

}

我在这里走错路了吗?在 Apache Camel 3.x 中是否有更简单/其他的方法来做到这一点?

标签: javaapache-camel

解决方案


推荐阅读