[解決済み] Spring BootとSpring Securityアプリケーションで静的なWebリソースを提供する
質問
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.jpg
はhttp://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 ファイルへのアクセスが許可されています。
関連
-
[解決済み】BindingResultもBean名のプレーンターゲットオブジェクトもリクエスト属性として利用できない [重複].
-
[解決済み] Spring SecurityのantMatcher()はいつ使うのか?
-
[解決済み] Spring Bootアプリケーションにポートを設定する方法
-
[解決済み】Spring MVCで静的コンテンツを処理する方法は?
-
[解決済み] Spring Controller のマッピングで url のパラメータを受け取るには?
-
[解決済み] SwaggerのURLに認証なしでアクセスできるようにSpring Securityを設定する方法
-
[解決済み] Spring-mvcでSession属性を使用する方法
-
[解決済み] Spring Cloud GatewayはZuulとどう違うのですか?
-
[解決済み] SpringBootテストで異なるapplication.ymlを読み込む
-
[解決済み] Spring MockMVCを使ったSpringの@RequestBodyのテスト
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】BindingResultもBean名のプレーンターゲットオブジェクトもリクエスト属性として利用できない [重複].
-
[解決済み] Spring 3 リクエスト処理に失敗しました。ネストされた例外は java.lang.NullPointerException です。
-
[解決済み】Spring MVCで静的コンテンツを処理する方法は?
-
[解決済み] JAX-RSとSpring Restの違いについて
-
[解決済み] SwaggerのURLに認証なしでアクセスできるようにSpring Securityを設定する方法
-
[解決済み] 複数の @ControllerAdvice @ExceptionHandler の優先順位を設定する。
-
[解決済み] Spring Cloud GatewayはZuulとどう違うのですか?
-
[解決済み] SpringBootテストで異なるapplication.ymlを読み込む
-
[解決済み] Spring MockMVCを使ったSpringの@RequestBodyのテスト
-
[解決済み] スプリングブート faviconのオーバーライド