Spring Boot Embedded Tomcat свойство «allowLinking»

Я искал способ раскрыть свойство «allowLinking», чтобы позволить TomcatEmbeddedServletContainerFactory следовать символическим ссылкам на ресурсы, которые находятся под его documentRoot.

Согласно документации Tomcat 8 Migration, эта функция переключилась на тег «Ресурсы» для Tomcat 8+: Tomcat 8 Руководство по миграции

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

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

Как можно открыть это свойство при программной настройке TomcatEmbeddedServletContainerFactory для приложения Spring Boot?


person OmegaGame    schedule 06.01.2016    source источник


Ответы (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;
}
person Erik Brandsberg    schedule 09.03.2017

спасибо Эрик Брандсберг, измените код в 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;
}
person long Xue    schedule 14.08.2017