Spring Boot 3.0 を使用した Spring Security ロールベースの認証と認可の実装

May 08 2023
学習者の皆さん、こんにちは。ここでは、Spring Boot を使用した Spring Security の実装について説明します。Spring セキュリティは、一般的な攻撃に対する認証、承認、および保護を提供します。

学習者の皆さん、こんにちは。ここでは、Spring Boot を使用した Spring Security の実装について説明します。Spring セキュリティは、一般的な攻撃に対する認証、承認、および保護を提供します。

認証 -認証は、特定のリソースにアクセスしようとしているユーザーの身元を確認する方法です。認証が実行されると、身元がわかり、承認を実行できます。

承認 -承認とは、特定のリソース/URL にアクセスする許可を与えることを意味します。

Spring Security を実装する手順

ステップ 1: POM.XML に Spring Security 依存関係を追加する

ステップ 2: 構成クラスを作成し、認証および許可メソッドを追加します。

@EnableWebSecurity は、デフォルトのセキュリティ構成をアプリケーションに提供します。デフォルトのセキュリティは、HTTP セキュリティ フィルタとセキュリティ フィルタ チェーンの両方を有効にし、基本認証をエンドポイントに適用します。

@Configuration は、Bean 定義のクラスをスキャンし、それらをアプリケーション コンテキストに登録するように Spring Boot に指示します。

authenticateProvider() メソッドは、ユーザー名、パスワード、ロールなどのすべてのユーザー詳細を保存するために使用されます。Spring Security には、userDetailsS​​ervice を含む DaoAuthenticationProvider クラスが含まれており、passwordEncoder.passwordEncoder() はパスワードを暗号化するために使用され、暗号化されたパスワードは DB に保存されます。

SecutityFilterChain() メソッドは、リソースを認可するためのものです。

.requestMatchers("/products/welcome","/products/new").permitAll() は、すべてのユーザーにアクセス権を付与するためのもので、どのユーザーもこれら 2 つの URL にアクセスできます。

requestMatchers(“/products/**”).authenticated() は、認証されたユーザーにアクセス権を付与することです。

ステップ 3: 役割ベースの承認を実装する

@PreAuthorizeアノテーションは、メソッドが実行される前に評価される式を指定するために使用されます。式が true と評価された場合、メソッドはそれ以外の場合に実行され、AccessDeniedException がスローされます。

メソッドはロールgetAllProducts()を持つユーザーのみが実行できますROLE_USERが、getProductById()メソッドはロールを持つユーザーのみが実行できますROLE_ADMIN

実装のテスト

実装をテストするサンプル コードを追加しました。

ユーザー資格情報を与えると、ユーザーはユーザー エンドポイントにアクセスできるようになります。

ユーザーがユーザー資格情報を使用して管理エンドポイントにアクセスしようとすると、エラー ページが表示される

注: この実装の動作する github コードが必要な場合は、私をフォローしてメール ID にコメントしてください。ソース コードのリンクをメールで送信します。

パート 2: JWT を使用した Spring Security 認証と承認

他の Spring Boot コンセプトのリンクを参照してください。

春の AOP チュートリアル

Spring Boot ロギングのチュートリアル

Spring Boot での一元化された構成

最も一般的に使用される Hibernate アノテーション

インタビューのための重要なマイクロサービス設計パターン