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

この問題を解決するには、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 に答える