2016-12-29 3 views
0

J'essaie d'utiliser Tuckey comme UrlRewrite dans mon projet de démarrage de printemps, mais j'obtenir l'erreur ci-dessous l'enregistrement Tuckey filtre:org.tuckey.web.filters.urlrewrite.UrlRewriteFilter ERREUR: impossible de trouver le fichier UrlRewrite conf à urlrewrite.xml

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

je me inscrire filtre Tucky comme ci-dessous dans mon Configuration class:

@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; 
} 

Même i utilisé pour enregistrer le filtre comme ci-dessous:

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

il fonctionnait dans aucune version de démarrage! quel est le problème avec ma configuration.

Répondre

1

Nous avons eu le même problème récemment. trouvé ce post avec une réponse: Spring boot cannot find urlrewrite.xml inside jar file

TL; DR: Création d'une classe étendue UrlRewriteFilter et réenregistrés le loadUrlRewriterMethod pour permettre le chargement d'une configuration en tant que org.springframework.core.io.Resource

S'il vous plaît adapter à vos besoins:

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(), "@@[email protected]@"); 
      checkConf(conf); 
     } catch (IOException ex) { 
      throw new ServletException("Unable to load URL rewrite configuration file from " + this.resource, ex); 
     } 
    } 
} 

et dans la classe d'application:

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; 
} 
+0

travaillé! Awesom :) –