Spring Boot Webアプリケーションがあり、Linode VPSの共有Dropboxディレクトリ(〜/ Dropbox/images)にある静的コンテンツを提供したいと思います。私はSpring Bootが静的コンテンツを自動的に提供することを読んだことがあります
"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/",
もちろん、私のDropboxディレクトリはクラスパス上にありません。
Dropboxフォルダー内の画像を提供するようにApacheを構成できましたが、Spring Securityを利用して、静的コンテンツへのアクセスを認証されたユーザーに制限したいと思います。
独自の静的リソースハンドラーを追加できます(デフォルトを上書きします)。
@Configuration
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("file:/path/to/my/dropbox/");
}
}
これについてのドキュメントは Spring Boot にありますが、実際には単なるVanilla Spring MVC機能です。
また、スプリングブート1.2(と思う)からspring.resources.staticLocations
を設定することもできます。
Springboot(Spring経由)により、既存のリソースハンドラーへの追加が簡単になりました。 Dave Syers answer を参照してください。既存の静的リソースハンドラーに追加するには、単に既存のパスをオーバーライドしないリソースハンドラーパスを使用してください。
以下の2つの「また」の注意事項は引き続き有効です。
。 。 。
[編集:以下のアプローチはもはや有効ではありません]
デフォルトの静的リソースハンドラをextendしたい場合は、次のように動作するようです。
@Configuration
@AutoConfigureAfter(DispatcherServletAutoConfiguration.class)
public class CustomWebMvcAutoConfig extends
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
String myExternalFilePath = "file:///C:/Temp/whatever/m/";
registry.addResourceHandler("/m/**").addResourceLocations(myExternalFilePath);
super.addResourceHandlers(registry);
}
}
super.addResourceHandlers
を呼び出すと、デフォルトのハンドラーが設定されます。
また:
@Dave Syersの回答に基づいて、Spring Bootプロジェクトに次のクラスを追加します。
@Configuration
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter {
private static final Logger LOG = LoggerFactory.getLogger(StaticResourceConfiguration.class);
@Value("${static.path}")
private String staticPath;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if(staticPath != null) {
LOG.info("Serving static content from " + staticPath);
registry.addResourceHandler("/**").addResourceLocations("file:" + staticPath);
}
}
// see https://stackoverflow.com/questions/27381781/Java-spring-boot-how-to-map-my-my-app-root-to-index-html
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("redirect:/index.html");
}
}
これにより、--static.path
のようなパラメーターでスプリングブートアプリを起動できます
Java -jar spring-app-1.0-SNAPSHOT.jar --static.path=/path/to/my/static-files/
これは、開発とテストに非常に便利です。
spring.resources.staticLocations
で設定できるプロパティapplication.properties
があります。これはデフォルトの場所を上書きすることに注意してください。 org.springframework.boot.autoconfigure.web.ResourceProperties
を参照してください。
@Dave Syer、@ kaliatechおよび@asmaierに基づくと、springboot v2 +の方法は次のようになります。
@Configuration
@AutoConfigureAfter(DispatcherServletAutoConfiguration.class)
public class StaticResourceConfiguration implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
String myExternalFilePath = "file:///C:/temp/whatever/m/";
registry.addResourceHandler("/m/**").addResourceLocations(myExternalFilePath);
}
}
@マーク・シェーファー
遅すぎることはありませんが、静的の後にスラッシュ(/
)を追加します。
spring.resources.static-locations=file:/opt/x/y/z/static/
http://<Host>/index.html
に到達できるようになりました。
現在のSpring-Bootバージョン1.5.3では、パラメーターは
spring.resources.static-locations
更新設定済み
`spring.resources.static-locations = file:/ opt/x/y/z/static``
を呼び出すと、このフォルダにindex.htmlが住んでいると予想されます
http://<Host>/index.html
これは機能しませんでした。 URLにフォルダー名を含める必要がありました。
http://<Host>/static/index.html
C:/ imagesから静的コンテンツを提供したかった
このプロパティを追加するとうまくいきました:
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:///C:/images/
Spring Boot Docでプロパティの元の値を見つけました 付録A
これにより、c:/images/image.jpgが http:// localhost:8080/image.jpg としてアクセス可能になります。
ファイルシステムから提供するには
spring.resources.static-location=file:../frontend/build
にapplication.properties
を追加しました
index.html
はbuild
フォルダーにあります
使用して絶対パスを追加することもできます
spring.resources.static-location=file:/User/XYZ/Desktop/frontend/build
同様に、Dropboxフォルダーパスを追加してみることができると思います。
WebMvcConfigurerAdapterは非推奨になっていることに注意してください( WebMvcConfigurerAdapter を参照)。 Java 8のデフォルトメソッドにより、 WebMvcConfigurer のみを実装する必要があります。
FWIW、私は上記で推奨されたspring.resources.static-locations
で成功しませんでした。私のために働いたのはspring.thymeleaf.prefixを設定することでした:
report.location=file:/Users/bill/report/html/
spring.thymeleaf.prefix=${report.location}