有可能以某种方式使用RewriteValve自定义嵌入式tomcat 吗?正如我在api中看到的那样,目前只有addContextValves和addEngineValves的方法,但是在文档中作为尖头tomcat,RewriteValve应该放在Host或webapp的context.xml中.我不明白是否addContextValves可以为此工作.
谢谢
对的,这是可能的。这是您需要遵循的两个步骤:
实现您自己的 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;
}
Run Code Online (Sandbox Code Playgroud)将 rewrite.conf 文件添加到您的应用程序的 WEB-INF 目录并指定重写规则。这是一个示例 rewrite.conf 内容,我在 angular 应用程序中使用它来利用 angular 的 PathLocationStrategy (基本上我将所有内容重定向到 index.html 因为我们只使用 spring boot 来提供静态 Web 内容):
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]
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
1925 次 |
| 最近记录: |