【问题标题】:org.tuckey.web.filters.urlrewrite.UrlRewriteFilter ERROR: unable to find urlrewrite conf file at urlrewrite.xmlorg.tukey.web.filters.urlrewrite.UrlRewriteFilter 错误:无法在 urlrewrite.xml 找到 urlrewrite conf 文件
【发布时间】:2016-12-29 07:14:46
【问题描述】:

我正在尝试在我的 Spring Boot 项目中使用 Tuckey 作为 urlRewrite,但在注册 Tuckey 过滤器时出现错误:

org.tuckey.web.filters.urlrewrite.UrlRewriteFilter ERROR: unable to find urlrewrite conf file at `urlrewrite.xml` even i have `urlrewrite.xml` file under resources. 

我在Configuration class 中注册了如下所示的Tucky 过滤器:

@Bean
public FilterRegistrationBean urlRewriteFilterRegistration() throws IOException {
    log.info("UrlRewriteFilter registered!");     
    FilterRegistrationBean registration = new FilterRegistrationBean();
    registration.setFilter(new UrlRewriteFilter());
    registration.setName("UrlRewriteFilter"); 
    List<String> urlPatterns = new ArrayList<>();
    urlPatterns.add("/urlmap");
    registration.setUrlPatterns(urlPatterns); 
    registration.getInitParameters().put("confPath","/urlrewrite.xml");
    return registration;
}

即使我曾经像下面这样注册过滤器:

FilterRegistration.Dynamic urlRewriteFilter = servletContext.addFilter("urlRewriteFilter",  new UrlRewriteFilter());
    urlRewriteFilter.setInitParameter("confPath", "urlrewrite.xml");
    urlRewriteFilter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD), false, "/*");

它在无引导版本中工作! 我的配置有什么问题。

【问题讨论】:

    标签: spring spring-boot tuckey-urlrewrite-filter


    【解决方案1】:

    最近遇到了同样的问题。 找到这个帖子有一个答案: Spring boot cannot find urlrewrite.xml inside jar file

    TL;DR:创建了一个扩展 UrlRewriteFilter 的类并覆盖了 loadUrlRewriterMethod 以允许将配置加载为 org.springframework.core.io.Resource

    请适应您的需求:

    public class BootCompliantUrlRewriteFilter extends UrlRewriteFilter {
    
        private Resource resource;
    
        public BootCompliantUrlRewriteFilter(Resource config){
            this.resource = config;
        }
    
        //Override the loadUrlRewriter method, and write your own implementation
        @Override
        protected void loadUrlRewriter(FilterConfig filterConfig) throws ServletException {
            try {
                //Create a UrlRewrite Conf object with the injected resource
                Conf conf = new Conf(filterConfig.getServletContext(), resource.getInputStream(), resource.getFilename(), "@@yourOwnSystemId@@");
                checkConf(conf);
            } catch (IOException ex) {
                throw new ServletException("Unable to load URL rewrite configuration file from " + this.resource, ex);
            }
        }
    }
    

    在应用程序类中:

    public static final String REWRITE_FILTER_NAME = "rewriteFilter";
    public static final String REWRITE_FILTER_CONF_PATH = "urlrewrite.xml";
    
    @Bean
    public FilterRegistrationBean rewriteFilterConfig() {
        FilterRegistrationBean reg = new FilterRegistrationBean();
        reg.setName(REWRITE_FILTER_NAME);
        reg.setFilter(new BootCompliantUrlRewriteFilter(new ClassPathResource(REWRITE_FILTER_CONF_PATH)));
    
        //reg.addInitParameter("confPath", REWRITE_FILTER_CONF_PATH);
        reg.addInitParameter("confReloadCheckInterval", "-1");
        reg.addInitParameter("statusPath", "/redirect");
        reg.addInitParameter("statusEnabledOnHosts", "*");
        reg.addInitParameter("logLevel", "WARN");
        return reg;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-10-19
      • 2015-04-26
      • 2015-09-09
      • 2020-11-02
      • 2020-06-30
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 2020-01-30
      相关资源
      最近更新 更多