Spring Bootが静的コンテンツを提供しない


173

Spring-bootプロジェクトで静的コンテンツを提供できません。

static下にという名前のフォルダを配置しましたsrc/main/resources。その中に、という名前のフォルダがありますimages。アプリをパッケージ化して実行すると、そのフォルダーに配置した画像が見つかりません。

私は、静的ファイルを置くことを試みたpublicresourcesMETA-INF/resources何も働きません。

:私の瓶がapp.jar -tvfた場合、私は、ファイルを右のフォルダにjarファイル内にあることがわかります /static/images/head.png例えば、しかし呼び出し:http://localhost:8080/images/head.png、私が得るすべてがあります404

スプリングブートがこれを見つけられない理由は何ですか?(私は1.1.4 BTWを使用しています)


6
デフォルトのリソース処理は/ **にマップされます。有効になっていることを再確認します。そうである場合、アプリの起動時に、出力に「マップされたURLパス[/ **]タイプ[ハンドラーorg.springframework.web.servlet.resource.ResourceHttpRequestHandler]のハンドラーへのマッピングされたURLパス[/ **]」で終わる行が表示されます。もう1つの可能性は、/ **にもマップされ、リソースハンドラーよりも優先される独自のコントローラーです。アプリのスタートアップの出力を投稿すると、何が起こっているかを簡単に確認できます。
アンディウィルキンソン

12
あなたは@EnableWebMvcあなたのアプリに(または同等のもの)を持っていると思います。これにより、デフォルトのブートMVC構成がオフになります。
Dave Syer 14

1
いいえ、@ EnableWebMvcはどこにもありません。わかりません。テンプレートでも同様です。私のテンプレート(フリーマーカー)はすべて、Spring Bootのクラスローダーによって検出されています。
Vinicius Carvalho 14

2
私は同様の問題に遭遇し、提供されている推奨される解決策のいずれにも運がありませんでした。誰かがとても親切に見て、それが何であるかを正確に指摘することができれば、それは非常に高く評価されます!!! github.com/kylebober/kbss
カイルS.ボーバー2015年

3
ファイルsrc / main / resources / public / style.cssがある場合、そのURLは/style.cssであり、/ public / style.cssではないことがわかりました。
Daveは

回答:


179

1年以上経過しても死者を復活させることはできませんが、これまでのすべての回答はいくつかの重要なポイントを逃しています。

  1. @EnableWebMvcクラスで無効になりorg.springframework.boot.autoconfigure.web.WebMvcAutoConfigurationます。完全な制御が必要な場合は問題ありませんが、それ以外の場合は問題です。
  2. すでに提供されているものに加えて、静的リソース用に別の場所を追加するためにコードを記述する必要はありません。org.springframework.boot.autoconfigure.web.ResourcePropertiesv1.3.0.RELEASEから見ると、staticLocationsで構成できるフィールドがありますapplication.properties。これがソースからのスニペットです:

    /**
     * Locations of static resources. Defaults to classpath:[/META-INF/resources/,
     * /resources/, /static/, /public/] plus context:/ (the root of the servlet context).
     */
    private String[] staticLocations = RESOURCE_LOCATIONS;
  3. 前述のように、リクエストURLはこれらの場所に関連して解決されます。したがってsrc/main/resources/static/index.html、リクエストURLがの場合に提供されます/index.html。Spring 4.1以降、パスの解決を担当するクラスはorg.springframework.web.servlet.resource.PathResourceResolverです。

  4. サフィックスパターンマッチングはデフォルトで有効になっています。つまり、リクエストURLの/index.html場合、Springはに対応するハンドラーを探します/index.html。これは、静的コンテンツを提供することを意図している場合の問題です。これを無効にするには、以下のように拡張してWebMvcConfigurerAdapter(ただし、は使用しないで@EnableWebMvc)オーバーライドconfigurePathMatchします。

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        super.configurePathMatch(configurer);
    
        configurer.setUseSuffixPatternMatch(false);
    }

私見、コード内のバグを減らす唯一の方法は、可能な限りコードを記述しないことです。すでに提供されているものを使用してください。たとえそれがいくらかの調査を必要とする場合でも、リターンはそれだけの価値があります。


3
この答えは確かに多くの研究の結果です。読むのに最適なもの
Ekansh Rastogi

2
私が極めて重要だった場合、私はこの答えを取り、それをスプリングブートのドキュメントに入れます
aliopi 2017

2
@Abhijit Sarkar私はPivotalという会社を意味していましたが、悪い気持ちで申し訳ありませんでしたが、意図されていませんでした。私が正しければ、Pivo​​talはSpringの所有者です。私はそれを文書化することもできましたが、彼らはこれに対して支払いを受ける人々がいるので、彼らはそれを行うべきです:P
aliopi

1
@aliopi Springはオープンソースプロジェクトです。
Abhijit Sarkar 2017年

3
コードのバグを減らす唯一の方法は、実際にこのようにコードを書くことではありません[...]
Clijsters 2017年

78

spring-bootの記述とは異なり、コンテンツを提供するために私のspring-boot jarを取得するには、次の構成クラスを使用して、src / main / resources / staticコンテンツを具体的に登録する必要がありました。

@Configuration
public class StaticResourceConfiguration implements WebMvcConfigurer {

    private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
            "classpath:/META-INF/resources/", "classpath:/resources/",
            "classpath:/static/", "classpath:/public/" };

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**")
            .addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS);
    }
}

3
私は同じ問題、同じバージョンのSpring Bootを持っていますが、これも私には
うまくいき

バージョン1.2.5での問題を修正しました!! どうもありがとう..これに投票してください!!
mrclrchtr 2015年

このハックは機能します...自動構成が失敗するのは奇妙です
Allan Vital

残念ながら、このハックは上手くいかなかったので残念です。根本的な原因がリソースへのパスかどうかはわかりません。おそらく、私はそれをWindowsで実行しているので、それらを異なるフォーマットにする必要がありますか?
acarlstein

50

同様の問題があり、簡単な解決策は構成クラスを拡張することでしたWebMvcAutoConfiguration

@Configuration
@EnableWebMvc
@ComponentScan
public class ServerConfiguration extends WebMvcAutoConfiguration{
}

静的コンテンツを提供するために他のコードは必要ありませんでしたが、public下にディレクトリを置き、リソースディレクトリとしてsrc/main/webapp指すようにmavenを構成しsrc/main/webappました。これは、publicがにコピーされるtarget/classesため、spring-boot / tomcatが実行時に実行時にクラスパスにあることを意味します。


この方法では、静的リソースは別のプロファイルでは機能しません。たとえば、別のIPアドレスを使用するリリース用のプロファイルがあります。すべてのリソースで404エラーが発生します。
Mahdi 2017

24

「/」にマップされているか、パスがマップされていないコントローラーを探します。

このような問題があり、405エラーが発生し、頭を何日も強く叩きました。問題は、@RestController注釈を付けることを忘れていた注釈付きコントローラーであることがわかりました@RequestMapping。このマッピングされたパスはデフォルトで「/」になり、静的コンテンツリソースのマッピングをブロックしたと思います。


1
私のためにそれを解決しました!私は@RestController( "/ blubb")で注釈されたコントローラを持っていましたが、それは明らかに間違っていますが、時々、あなたは木の森を見ることはありません。@RestController @RequestMapping( "/ blubb")に変更すると解決しました
krinklesaurus '30

私はそれが助けてくれてうれしいです、そして「すべての木のための森を見ることができない」という表現がドイツ語とスウェーデン語で存在するという考えによって面白がっていました:)
Johannes

2
静的コンテンツの提供とルートリクエストの動的ハンドラーの両方を使用する場合は、@ RequestMapping( "/")を明示的に追加することもできます。
mjj1409 2016

1
うわー...これで2日無駄な日を過ごしました。私のスプリングブートmvcアプリケーションはスプリングセキュリティを使用しており、styles.cssファイルが表示されませんでした。セキュリティが原因で、.jspがstyles.cssファイルにアクセスできなかったと思います。コントローラに@RequestMapping({""、 "/"、 "/ home"})がありました。「」と「/」を削除すると、私のMVCは完全に機能し始めました... Very Strange。
skmansfield 2016

3
@ShafiulいいえEnableAutoConfigurationとSpringBootApplicationの両方を追加することは冗長です。"@SpringBootApplication"には "@EnableAutoConfiguration"が含まれています
Dehan de Croos

19

次のように構成できます。

@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcAutoConfigurationAdapter {

// specific project configuration

}

ここで重要なのは、メソッドをオーバーライドするWebMvcConfig 可能性addResourceHandlersがあるため、明示的に呼び出す必要super.addResourceHandlers(registry)があることです(デフォルトのリソースの場所に満足している場合は、メソッドをオーバーライドする必要はありません)。

ここでコメントする必要があるもう1つのことは、これらのデフォルトのリソースの場所(、、および)は/static/publicにマップされているリソースハンドラーがまだない場合にのみ登録されるということです。/resources/META-INF/resources/**

この時点から、たとえばsrc/main/resources/static/imagesnamed image.jpgにイメージがある場合、次のURLを使用してそのイメージにアクセスできますhttp://localhost:8080/images/image.jpg(サーバーがポート8080で起動し、アプリケーションがルートコンテキストにデプロイされているため)。


addResourceHandlersを/ can /オーバーライドすることはできますが、OPの問題を解決するために実際に行う必要はないことをコメントすることはおそらく重要です。
ソフトウェアエンジニア

@EngineerDolleryコメントへの感謝、それは私の意図でしたが、私は明示的に説明を追加しました
Francisco Spaeth

css / jsをsrc / main / resources / staticフォルダーに移動したところ、エラーは発生しなくなりましたが、ページにcssを表示することはできません。
Hatem Jaber 2015

おい、私はこの実用的な解決策を見つけるためにインターネットの奥深くを旅した。キーがの組み合わせだったようだ@EnableWebMvcWebMvcAutoConfigurationAdapter。どうもありがとう!
イアンニューランド

私にとっても、それはそのままでは機能しませんでした。これも追加する必要がありました。2つの問題があったので、ここにコメントを追加します。@Johannesが言及しているように、「/」をマップするコントローラーもありました。これを実行して "/"コントローラを削除すると、問題が解決しました。
loyalBrown 2017

11

Spring Bootのリファレンスドキュメントを確認しましたか?

デフォルトでは、Spring Bootはクラスパス内の/static(または/publicor /resourcesまたは/META-INF/resources)というフォルダーから、またはServletContextのルートから静的コンテンツを提供します。

また、プロジェクトとガイド「Spring MVCを使用したWebコンテンツの提供」を比較したり、spring-boot-sample-web-uiプロジェクトのソースコードを確認したりすることもできます。


2
はい、そうしました。ドキュメントで指示されているように、これらは私が試した場所です。しかし、何も機能しません。リソースがまったく見つからない理由がわかりません。サンプルを調べてみましたが、奇妙なことに、ドキュメントで提案されている構造を使用するサンプルはありません。先ほど貼り付けたものはテンプレートフォルダーを使用していますが、これはthymeleafの構成または速度用であると想定しています。
Vinicius Carvalho 14

Web UIサンプル(github.com/spring-projects/spring-boot/tree/v1.1.3.RELEASE/…)は静的コンテンツを提供します。
アンディウィルキンソン

私は@ViniciusCarvalhoに同意します。css/ jsを適切な場所に配置するために可能なすべての組み合わせを試しましたが、それを行うことができないようです。localhost:8089 / css / styles.cssにアクセスしても、何も表示されません。ボディカラーを変更するルールは1つだけです。
Hatem Jaber 2015

10

私はこの正確な問題を抱えていましたが、application.propertiesで定義したことに気付きました:

spring.resources.static-locations=file:/var/www/static

それは私が試した他のすべてを上書きしていた。私の場合、両方を保持したかったので、プロパティを保持して追加しました:

spring.resources.static-locations=file:/var/www/static,classpath:static

src / main / resources / staticからlocalhost:{port} /file.htmlとしてファイルを提供したもの。

上記のどれも私にとってうまくいきませんでした。オンラインから簡単にコピーして別の目的を果たすことができるこの小さなプロパティについて誰も言及しなかったからです;)

それが役に立てば幸い!この問題を抱えている人々のためのこの長い回答の投稿にうまく適合すると考えました。


Spring Boot 2.0.5.RELEASEを使用spring.resources.static-locations=file:/var/www/static,classpath:staticしてapplication.propertiesに入れていますが、うまくいきませんでした。私は@EnableWebMvc自分の構成クラスで使用しています。
N. Ngo 2018

これが私の問題を解決したものです。とsecurity.ignoredandsecurity.publicPaths
JoSSte

5

以前の回答はこのトピックを非常によく扱っていると思います。ただし、アプリケーションでSpring Securityを有効にしている場合は、「/ static / fonts」などの他の静的リソースディレクトリへのリクエストを許可するようにSpringに具体的に指示する必要がある場合があると付け加えておきます。

私の場合、「/ static / css」、「/ static / js」、「/ static / images」がデフォルトで許可されていましたが、/ static / fonts / **がSpring Securityの実装によってブロックされました。

以下は、私がこれを修正した方法の例です。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
.....
    @Override
    protected void configure(final HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/", "/fonts/**").permitAll().
        //other security configuration rules
    }
.....
}

5

古い質問にさらに別の回答を追加するだけです... 静的リソースハンドラーの作成を担当するコードである、読み込みの@EnableWebMvc妨げになると人々は述べていWebMvcAutoConfigurationます。WebMvcAutoConfiguration読み込みを妨げる他の条件もあります。これを確認する最も明確な方法は、ソースを確認することです。

https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/ WebMvcAutoConfiguration.java#L139-L141

私の場合、WebMvcConfigurationSupport自動構成を妨げる条件となる拡張元のクラスを持つライブラリを含めていました。

@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)

から拡張しないことが重要WebMvcConfigurationSupportです。代わりに、から拡張してくださいWebMvcConfigurerAdapter

更新:5.xでこれを行う適切な方法は、WebMvcConfigurerを実装することです


WebMvcConfigurerAdapterは、Spring Boot 5.0で非推奨になりました。グーグルすると、そのクラスのJavadocでこれがわかります。「5.0以降、WebMvcConfigurerにはデフォルトのメソッドがあり(Java 8ベースラインによって可能になりました)、このアダプターを必要とせずに直接実装できます。」だから私今WebMvcConfigurerを実装していると思います
Marvo、

まさにその通りです。5.xでこれを行う適切な方法は、を実装することWebMvcConfigurerです。
バル

4

この解決策は私にとってはうまくいきます:

最初に、次の構造に従って、webapp / WEB-INFの下にリソースフォルダーを配置します。

-- src
  -- main
    -- webapp
      -- WEB-INF
        -- resources
          -- css
          -- image
          -- js
          -- ...

第二に、春の設定ファイル

@Configuration
@EnableWebMvc
public class MvcConfig extends WebMvcConfigurerAdapter{

    @Bean
    public ViewResolver getViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".html");
        return resolver;
    }

    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resource/**").addResourceLocations("WEB-INF/resources/");
    }
}

その後、http:// localhost:8080 / resource / image / yourimage.jpgなどのリソースコンテンツにアクセスできます。


3

2つの考慮事項があります(Spring Boot v1.5.2.RELEASE)-1)@EnableWebMvcアノテーションのすべてのコントローラークラスを確認し、アノテーションがある場合は削除します2)アノテーションが使用されているコントローラークラスを確認します-@RestControllerまたは@Controller 。Rest APIとMVCの動作を1つのクラスに混在させないでください。MVCの場合は@Controllerを使用し、REST APIの場合は@RestControllerを使用します

2つ以上のことを行うと、問題が解決しました。今私の春のブーツは問題なく静的リソースをロードしています。@Controller => load index.html =>静的ファイルを読み込みます。

@Controller
public class WelcomeController {

    // inject via application.properties
    @Value("${welcome.message:Hello}")
    private String message = "Hello World";

    @RequestMapping("/")
    public String home(Map<String, Object> model) {
        model.put("message", this.message);
        return "index";
    }

}

index.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>index</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />


    <link rel="stylesheet/less" th:href="@{/webapp/assets/theme.siberia.less}"/>

    <!-- The app's logic -->
    <script type="text/javascript" data-main="/webapp/app" th:src="@{/webapp/libs/require.js}"></script>
    <script type="text/javascript">
        require.config({
            paths: { text:"/webapp/libs/text" }
        });
    </script>



   <!-- Development only -->
     <script type="text/javascript" th:src="@{/webapp/libs/less.min.js}"></script>


</head>
<body>

</body>
</html>

@EnableWebMvcを削除するとうまくいきました!ありがとう
turboemu

3

静的リソースをディレクトリの下に置きます

/src/main/resources/static

このプロパティをapplication.propertiesファイルに追加します

server.servlet.context-path=/pdx

http:// localhost:8080 / pdx / images / image.jpgからアクセスできます

ここに画像の説明を入力してください


1
私が言う方法を知らないおかげであなたにを。あなたは素晴らしい兄弟です。私は上記のほとんどすべての解決策を試しましたが、これが最良かつ最短の解決策です。
user12061795

2

IDE内からアプリケーションを起動して(つまり、EclipseまたはIntelliJ Ideaから開始して)、Mavenを使用して問題が表面化した場合、ソリューションの鍵はSpring-boot Getting Startedドキュメントにあります。

Mavenを使用している場合は、次を実行します。

mvn package && java -jar target/gs-spring-boot-0.1.0.jar

その重要な部分はpackage、アプリケーションが実際に開始される前に実行される目標を追加することです。(アイデア:Runメニュー、Edit Configrations...Add、、そこを選択Run Maven Goalし、指定したpackageフィールドでゴールを)


1

私は1.3.5を使用しており、Jersey実装を介してRESTサービスの束をホストしています。いくつかのHTML + jsファイルを追加することを決定するまで、それはうまくいきました。このフォーラムでの回答はどれも役に立ちませんでした。しかし、次の依存関係をpom.xmlに追加すると、src / main / resources / staticのすべてのコンテンツが最終的にブラウザーを介して表示されていました。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<dependency>

spring-web / spring-webmvcは、spring boot auto configをオンにする重要な推移的な依存関係のようです。


1

参考までに:完全に機能するSpring Bootアプリを台無しにして、静的なフォルダーからコンテンツが提供されないようにすることもできます。

 @RestController
public class BadController {
    @RequestMapping(method= RequestMethod.POST)
    public String someMethod(@RequestParam(value="date", required=false)String dateString, Model model){
        return "foo";
    }
}

この例では、不良コントローラーをプロジェクトに追加した後、ブラウザーが静的フォルダーで使用可能なファイルを要求すると、エラー応答は「405 Method Not Allowed」になります。

悪いコントローラーの例ではパスがマッピングされていないことに注意してください。


1

私は、リソースが404 Iから以下の削除が見つからないことを言って春のブート2.1.3で同じ問題に直面していたapplicatiion.properties

#spring.resources.add-mappings=true
#spring.resources.static-locations=classpath:static
#spring.mvc.static-path-pattern=/**,

削除された @enableWebMVCと取り外したWebMvcConfigurerオーバーライド

// @ EnableWebMvc

また、設定に@EnableAutoConfigurationがあることを確認してください。

そして、すべての静的リソースをsrc / main / resources / staticに配置すると、ついに魔法のように動作しました。


私の春の2.2.6でバージョンと私は@EnableAutoConfigurationとのsrc /メイン/リソース/静的の下のファイルを持っているが、それは動作しませんし、スロー500
タクールシヴァーニ

1

スプリングブート2. *を使用して、ルートにマップしGetMapping({"/{var}", "/{var1}/{var2}", "/{var1}/{var2}/{var3}"})、アプリがリソースの提供を停止するようにブームするコントローラーがあります。

私はそのようなルートを持つことはお勧めできないことを知っていますが、それはすべてあなたが構築しているアプリに依存します(私の場合、私はそのようなルートを持つしかないです)

これが、アプリがリソースを再び提供するようにするためのハックです。私は単に自分のリソースにマップするコントローラーを持っています。春は最初に直接ルートに一致するので、変数を持つものの前に/imgaes/{name}、他のリソースにマップして同じように繰り返すコントローラーメソッドを追加することにしました

@GetMapping(value = "/images/{image}", produces = {MediaType.IMAGE_GIF_VALUE, MediaType.IMAGE_JPEG_VALUE, MediaType.IMAGE_PNG_VALUE})
    public @ResponseBody
    byte[] getImage(@PathVariable String image) {
        ClassPathResource file = new ClassPathResource("static/images/" + image);
        byte[] bytes;
        try {
            bytes = StreamUtils.copyToByteArray(file.getInputStream());
        } catch (IOException e) {
            throw new ResourceNotFoundException("file not found: " + image);
        }
        return bytes;
    }

これで私の問題は解決しました


0

同じ問題があり、gradleとeclipseを使用し、それを理解しようと何時間も費やしました。

コーディングは必要ありません。トリックは、メニューオプションNew-> Source Folder(Newではなく-> Folder)を使用して、src / main / resourcesの下に静的フォルダーを作成する必要があることです。これが機能する理由はわかりませんが、新しい->ソースフォルダーを作成してから、フォルダーに静的という名前を付けました(その後、ソースフォルダーのダイアログで確認する必要があるエラーが発生しました:他のソースフォルダーの除外フィルターを更新してネストを解決してください)。index.htmlを追加した新しい静的フォルダーが機能するようになりました。


0

場合によっては、残りのコントローラーによってグローバルマッピングをオーバーライドしたかどうかを確認する価値があります。簡単な例の間違い(kotlin):

@RestController("/foo")
class TrainingController {

    @PostMapping
    fun bazz(@RequestBody newBody: CommandDto): CommandDto = return commandDto

}

上記の場合、静的リソースを要求すると次のようになります。

{
    title: "Method Not Allowed",
    status: 405,
    detail: "Request method 'GET' not supported",
    path: "/index.html"
}

その理由は、マップ@PostMappingしたい/fooがレベルの@RequestMapping注釈を忘れたためかもしれません@RestController。この場合、すべてのリクエストがマッピングされPOST、静的なコンテンツを受け取りません。


0

src / main / resources / staticの下のリソースが与えられている場合、このコードを追加すると、src / main / resources / staticのすべての静的コンテンツが「/」の下で利用可能になります。

@Configuration
public class StaticResourcesConfigurer implements WebMvcConfigurer {
    public void addResourceHandlers(final ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("classpath:/resources/static/");
    }
}

0

私の場合、.woffフォントや一部の画像など、一部の静的ファイルが提供されませんでした。しかし、cssとjsは問題なく動作しました。

更新:Spring Bootがwoffフォントを正しく提供するためのより良い解決策は、たとえばこの回答で言及されているリソースフィルタリングを構成することです(インクルードとエクスクルードの両方が必要であることに注意してください)。

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <excludes>
            <exclude>static/aui/fonts/**</exclude>
        </excludes>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>false</filtering>
        <includes>
            <include>static/aui/fonts/**</include>
        </includes>
    </resource>
</resources>

-----古いソリューション(機能しますが、一部のフォントが破損します)-----

別の解決策は、サフィックスパターンマッチングを無効にすることでした。 setUseSuffixPatternMatch(false)

@Configuration
public class StaticResourceConfig implements WebMvcConfigurer {
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        // disable suffix matching to serve .woff, images, etc.
        configurer.setUseSuffixPatternMatch(false);
    }
}

クレジット:@Abhijiは私に正しい方向への4.を示しました!


0

/ **へのリクエストは、resourcePropertiesで構成された静的な場所に対して評価されます 。

application.propertiesに以下を追加する必要があるかもしれません...

spring.resources.static-locations=classpath:/myresources/

これにより、デフォルトの静的な場所が上書きされます。

ResourceProperties.CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/",
        "classpath:/resources/", "classpath:/static/", "classpath:/public/" };

あなたはそれをしたくないかもしれません、そしてあなたのリソースがそれらのデフォルトのフォルダの1つに終わることを確認してください。

リクエストの実行:example.htmlが/public/example.htmlに格納されている場合、次のようにアクセスできます。

<host>/<context-path?if you have one>/example.html

<host>/<context-path>/magico/*classpath:/ magicofiles / *のファイルのような別のURI が必要な場合は、もう少し設定が必要です

@Configuration
class MyConfigClass implements WebMvcConfigurer

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/magico/**").addResourceLocations("/magicofiles/");
}

-1

上記のように、ファイルは$ClassPath/static/images/name.png、(/ staticまたは/ publicまたは/ resourcesまたは/ META-INF / resources)にある必要があります。この$ ClassPathは、main/resourcesまたはmain/javadirを意味します。

ファイルが標準ディレクトリにない場合は、次の構成を追加できます。

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/lib/**"); // like this
}

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        // ... etc.
}
...

}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.