1. ホーム
  2. spring-mvc

[解決済み] Spring BootとSpring Securityアプリケーションで静的なWebリソースを提供する

2023-06-07 06:17:33

質問

Spring BootでWebアプリケーションを開発し、Spring security java configurationを使用してセキュリティを確保しようとしています。

静的なWebリソースを' src/main/resources/public "に置きました。 に配置したら、アドバイス通り 春ブログのこちら を実行すると、静的リソースを取得することができます。 https://localhost/test.html を打つと、ブラウザはhtmlコンテンツを提供します。

問題点

Spring Securityを有効にしたところ、静的リソースのURLを叩くと認証が必要になりました。

私の関連するSpring SecurityのJavaコンフィグは以下のようになります。

@Override
    protected void configure(HttpSecurity http) throws Exception {
        // @formatter:off
        http.
            authorizeRequests()
                .antMatchers("/","/public/**", "/resources/**","/resources/public/**")
                    .permitAll()
                .antMatchers("/google_oauth2_login").anonymous()
                    .anyRequest().authenticated()
                .and()
                .formLogin()
                    .loginPage("/")
                    .loginProcessingUrl("/login")
                    .defaultSuccessUrl("/home")
                    .and()
                    .csrf().disable()
                    .logout()
                        .logoutSuccessUrl("/")
                        .logoutUrl("/logout") // POST only
                .and()
                    .requiresChannel()
                    .anyRequest().requiresSecure()
                .and()
                    .addFilterAfter(oAuth2ClientContextFilter(),ExceptionTranslationFilter.class)
                    .addFilterAfter(googleOAuth2Filter(),OAuth2ClientContextFilter.class)
                .userDetailsService(userService);
        // @formatter:on
    }

どのように設定すればよいのでしょうか? antMatchers を設定して、src/main/resources/public 内に置かれた静的リソースを許可するようにしますか?

どのように解決するのですか?

いくつか注意すべき点があります。

  • Ant のマッチャーは、ファイルシステム上のリソースのパスではなく、リクエストのパスに対してマッチします。
  • に置かれたリソースは src/main/resources/public に置かれたリソースは、アプリケーションのルートから提供されます。 例えば src/main/resources/public/hello.jpghttp://localhost:8080/hello.jpg

現在の matcher の設定が、静的リソースへのアクセスを許可していないのは、このためです。例えば /resources/** で動作させるには、リソースを src/main/resources/public/resources に配置し http://localhost:8080/resources/your-resource .

Spring Bootを使用しているので、余計な設定を追加するのではなく、デフォルトを使用することを検討するとよいでしょう。Spring Bootは、デフォルトで /css/** , /js/** , /images/** そして /**/favicon.ico . 例えば、以下のような名前のファイルがあるとします。 src/main/resources/public/images/hello.jpg という名前のファイルを用意して、 余計な設定をしなくても http://localhost:8080/images/hello.jpg にログインすることなくアクセスできるようになります。これを実際に見てみると Web メソッドセキュリティスモークテスト では、特別な設定をしなくても、Bootstrap CSS ファイルへのアクセスが許可されています。