是否有可能以某种方式使用RewriteValve自定义嵌入式tomcat?正如我在api中看到的,目前只有addContextValves和addEngineValves的方法,但在文档中作为尖头tomcat,RewriteValve应该放在Host或webapp的上下文中。 XML。我不明白addContextValves
是否适用于此。
由于
答案 0 :(得分:2)
是的,有可能。这是您需要遵循的两个步骤:
实现自己的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;
}
将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]