Spring Boot嵌入式Tomcat'allowLinking'属性
问题描述:
我一直在寻找一种方法来公开'allowLinking'属性,以允许TomcatEmbeddedServletContainerFactory遵循符号链接到其documentRoot下的资源。Spring Boot嵌入式Tomcat'allowLinking'属性
据Tomcat的8迁移文档此功能切换到“资源”标签为Tomcat 8+:Tomcat 8 Migration Guide
<!-- Tomcat 7: -->
<Context allowLinking="true" />
<!-- Tomcat 8: -->
<Context>
<Resources allowLinking="true" />
</Context>
而编程配置TomcatEmbeddedServletContainerFactory的春天启动应用程序如何将一个揭露这个属性?
答
我有完全一样的问题,而且是能够实现以下以解决此问题:
@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;
}
答
THKS埃里克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;
}