4

我一直在寻找一种方法来公开属性“allowLinking”以允许 TomcatEmbeddedServletContainerFactory 遵循指向其 documentRoot 下资源的符号链接。

根据 Tomcat 8 迁移文档,此功能切换到 Tomcat 8+ 的“资源”标签:Tomcat 8 迁移指南

<!-- Tomcat 7: -->
<Context allowLinking="true" />

<!-- Tomcat 8: -->
<Context>
  <Resources allowLinking="true" />
</Context>

在以编程方式为 Spring Boot 应用程序配置 TomcatEmbeddedServletContainerFactory 时,如何公开此属性?

4

2 回答 2

2

我遇到了完全相同的问题,并且能够实施以下方法来解决此问题:

@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;
}
于 2017-03-09T22:34:00.540 回答
1

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;
}
于 2017-08-14T10:05:10.780 回答