spring-boot + tomcat RewriteValve

时间:2016-09-14 14:46:01

标签: spring-boot

是否有可能以某种方式使用RewriteValve自定义嵌入式tomcat?正如我在api中看到的,目前只有addContextValvesaddEngineValves的方法,但在文档中作为尖头tomcat,RewriteValve应该放在Host或webapp的上下文中。 XML。我不明白addContextValves是否适用于此。

由于

1 个答案:

答案 0 :(得分:2)

是的,有可能。这是您需要遵循的两个步骤:

  1. 实现自己的TomcatEmbeddedServletContainerFactory bean并设置RewriteValve

      import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;  
      ...
      import org.apache.catalina.valves.rewrite.RewriteValve; 
      ... 
    
      @Bean TomcatEmbeddedServletContainerFactory servletContainerFactory() {
        TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
        factory.setPort(8080);
        factory.addContextValves(new RewriteValve());
        return factory;
      }
    
  2. 将rewrite.conf文件添加到应用程序的WEB-INF目录中,并指定重写规则。这是一个示例rewrite.conf内容,我在角应用程序中使用它来利用角度的PathLocationStrategy(基本上我将所有内容重定向到index.html,因为我们只是使用spring boot来服务静态网页内容):

      RewriteCond %{REQUEST_URI} !^.*\.(bmp|css|gif|htc|html?|ico|jpe?g|js|pdf|png|swf|txt|xml|svg|eot|woff|woff2|ttf|map)$
      RewriteRule ^(.*)$ /index.html [L]