【问题标题】:Spring Boot Embedded Tomcat 'allowLinking' propertySpring Boot 嵌入式 Tomcat 'allowLinking' 属性
【发布时间】:2016-01-06 18:46:53
【问题描述】:
我一直在寻找一种方法来公开属性“allowLinking”以允许 TomcatEmbeddedServletContainerFactory 遵循指向其 documentRoot 下资源的符号链接。
根据 Tomcat 8 迁移文档,此功能切换到 Tomcat 8+ 的“资源”标签:Tomcat 8 Migration Guide
<!-- Tomcat 7: -->
<Context allowLinking="true" />
<!-- Tomcat 8: -->
<Context>
<Resources allowLinking="true" />
</Context>
在以编程方式为 Spring Boot 应用程序配置 TomcatEmbeddedServletContainerFactory 时如何公开此属性?
【问题讨论】:
标签:
java
spring-boot
embedded-tomcat-8
【解决方案1】:
我遇到了完全相同的问题,并且能够实施以下方法来解决此问题:
@Bean
public EmbeddedServletContainerFactory servletContainer()
{
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
// allow symbolic links under the filesystem context
// don't use this on Windows!
if (IOCase.SYSTEM.isCaseSensitive())
{
Log.info("Enabling support for symbolic links on the webserver.");
for (TomcatContextCustomizer customizer : tomcat.getTomcatContextCustomizers())
{
StandardContext context = new StandardContext();
context.setAllowLinking(true);
customizer.customize(context);
}
}
return tomcat;
}
【解决方案2】:
thks Erik Brandsberg,修改代码,在 Tomcat 8 中解决这个问题
@Bean
public EmbeddedServletContainerFactory servletContainer()
{
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
// allow symbolic links under the filesystem context
// don't use this on Windows!
if (IOCase.SYSTEM.isCaseSensitive())
{
TomcatContextCustomizer customizer = new TomcatContextCustomizer() {
@Override
public void customize(Context context) {
StandardRoot r = new StandardRoot();
r.setAllowLinking(true);
context.setResources(r);
}
};
tomcat.addContextCustomizers(customizer);
}
return tomcat;
}