質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Spring Security

Spring Securityは、Springのサブプロジェクトの一つでWebアプリケーションに必要な機能を追加します。正規ユーザーであるかを確認するための「認証機能」と、ユーザーのアクセスを制御する「認可機能」を簡単に追加することが可能です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

5934閲覧

Spring Boot3のSpring Security 6でSecurityFilterChainを使用して、SecurityConfigを作成したい

miu1

総合スコア7

Spring Security

Spring Securityは、Springのサブプロジェクトの一つでWebアプリケーションに必要な機能を追加します。正規ユーザーであるかを確認するための「認証機能」と、ユーザーのアクセスを制御する「認可機能」を簡単に追加することが可能です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2023/01/03 23:14

編集2023/01/04 01:46

実現したいこと

Spring Boot3のSpring Security 6でSecurityFilterChainを使用して、SecurityConfigを作成したいです。

参考記事 (Spring Security 5.7の記事を参考にしています)
https://www.docswell.com/s/MasatoshiTada/KGVY9K-spring-security-intro
https://qiita.com/suke_masa/items/908805dd45df08ba28d8

.requestMatchersでエラーが出ていて、requestMatchersの使用方法がわからなくて困っています。

わかるかたいらっしゃいましたらよろしくお願いします。

エラーメッセージ

型 AbstractRequestMatcherRegistry<AuthorizeHttpRequestsConfigurer<HttpSecurity>.AuthorizedUrl> のメソッド requestMatchers(RequestMatcher...) は (StaticResourceRequest.StaticResourceServerWebExchange) に適用できません。

ソース

Java

1package com.example.spring_boot_application; 2 3import org.springframework.boot.autoconfigure.security.reactive.PathRequest; 4import org.springframework.context.annotation.Bean; 5import org.springframework.context.annotation.Configuration; 6import org.springframework.security.config.annotation.web.builders.HttpSecurity; 7import org.springframework.security.web.SecurityFilterChain; 8 9@Configuration 10public class SecurityConfig { 11 12 @Bean 13 public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { 14 15 // 設定 16 http.formLogin(login -> login // フォーム認証の記述開始開始 17 .loginProcessingUrl("/login") // ユーザー名・パスワードの送信先URL 18 .loginPage("/login") // ログイン画面のURL 19 .defaultSuccessUrl("/") // ログイン成功後のリダイレクトURL 20 .failureUrl("/login?error") // ログイン失敗後のリダイレクトURL 21 .permitAll() // ログイン画面は未ログインでもアクセス可能 22 ).logout(logout -> logout // ログアウトの設定記述開始 23 .logoutSuccessUrl("/") // ログアウト成功後のリダイレクトURL 24 ).authorizeHttpRequests(authz -> authz // URLごとの認可設定記述開始 25 .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() // "/css/**"などはログイン無しでもアクセス可能 26 .mvcMatchers("/").permitAll() // "/"はログイン無しでもアクセス可能 27 .mvcMatchers("/general").hasRole("GENERAL") // "/general"はROLE_GENERALのみアクセス可能 28 .mvcMatchers("/admin").hasRole("ADMIN") // "/admin"はROLE_ADMINのみアクセス可能 29 .anyRequest().authenticated() // 他のURLはログイン後のみアクセス可能 30 ); 31 32 return http.build(); 33 } 34}

エラーが出ている箇所
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Spring Boot 3(Spring Security 6)では、requestMatchersに変更されたので、以下のようにすると動作可能かと思います。

java

1// mvcMatchersをrequestMatchersに変更 2).authorizeHttpRequests(authz -> authz 3 .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() 4 .requestMatchers("/").permitAll() 5 .requestMatchers("/general").hasRole("GENERAL") 6 .requestMatchers("/admin").hasRole("ADMIN") 7 .anyRequest().authenticated() 8);

投稿2023/01/03 23:35

KT001

総合スコア643

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miu1

2023/01/04 00:00 編集

ありがとうございます。全てrequestMatchersにする必要があるんですね。 しかし、.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() の行でエラーが出てしまいます。 引数の使い方の間違いなのですが、 .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() は resource/static にある"/css/**"などをログイン無しでもアクセス可能にするのですが、 フォルダ数が少ないので、1つずつ文字で指定するなども方法はあるかもしれませんが。
KT001

2023/01/03 23:59

閉じカッコの数などは、合っていますでしょうか?また、純粋にmvcMatchersをrequestMatchersに変更してもダメでしょうか? こちらの環境ではエラーが消えるので、もしかすると環境など(Javaのバージョンなど)がおかしいのかもしれません。
miu1

2023/01/04 00:02 編集

申し遅れました、Javaのバージョンが Adopt Open JDKの11を使用しています。 バージョンが関係しているかもしれませんね。
miu1

2023/01/04 00:04

.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() をやめて ↓ .mvcMatchers("/css/**").permitAll() .mvcMatchers("/js/**").permitAll() ... 等にしたほうがいいかもしれません。
miu1

2023/01/04 00:05

なるほどです、そもそもが間違いでした。JDKを17に更新します。
miu1

2023/01/04 00:08 編集

Spring Boot3を使いたかったですが、JDK11(LTS)を使用しようとしていたことが間違いでした。 ありがとうございます。 いまきづいたのですが、Adopt OpenJDKは16 までですね。 本家の物を使用する必要があるようです。
KT001

2023/01/04 00:21 編集

環境周りは難しかったりするので、解決して良かったです。
KT001

2023/01/04 00:12

ちなみに、Adopt OpenJDKはAdoptium(旧Adopt OpenJDK)に移行してしまったので、Adoptiumの方が最新です。旧Adopt OpenJDKは、もう更新がありません。 https://adoptium.net 最新は、こちらからダウンロードできます。
miu1

2023/01/04 01:23 編集

教えていただきありがとうございます。 私もAdoptを調べていたらAdoptiumを見つけました。そちらでダウンロードします。 現在はJDK17がLTSということもわかりました。
miu1

2023/01/04 01:49 編集

Adoptium OpenJDK17を入れて、Springスターターで再作成しましたが、結果が同じでした。 EclipseのJREは標準の17を設定していますが。 質問文に画像を追加させていただきました。 .requestMatchersの引数がStringだとエラーしないのでもしかしてと思い、 .requestMatchers(PathRequest.toStaticResources().atCommonLocations().toString()).permitAll() とtoString()を追加したところエラーはでなくなりました。
KT001

2023/01/04 03:15

import文を見落としていたのですが、参考記事と同じようにすると動くと思います。 // reactive.PathRequestをservlet.PathRequestへ変更 import org.springframework.boot.autoconfigure.security.servlet.PathRequest;
miu1

2023/01/05 14:33

ありがとうございます。 ご指摘のimport文の修正でtoStringをつけなくても治りました。 importには似たようなものもあるので気をつけたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問