インターネットの発展に伴い、セキュリティ管理を必要とするアプリケーションがますます増えています。 Spring Security は、さまざまな Java アプリケーションに統合できる認証および認可機能を提供するオープン ソース フレームワークです。この記事では、Java API 開発におけるセキュリティ制御に Spring Security を使用する方法について説明します。
1. Spring Security とは
Spring Security は、Spring フレームワークのセキュリティ制御のための拡張フレームワークです。ユーザー認証、認可、一般的な攻撃に対する保護など、いくつかの一般的なセキュリティ機能を提供します。 Spring Security は、初期は Acegi Security と呼ばれ、Acegi Technology によって開発されましたが、後に SpringSource (現 VMware) に買収され、SpringSource のオープンソース プロジェクトとなりました。 Spring Security は拡張性と柔軟性に優れており、複数の認証方法 (フォームベース、CAS、LDAP、OpenID など) で使用できます。この記事では、フォームベースの認証方法を紹介します。
2. Spring Security の基本原則
Spring Security は、サーブレットおよびフィルター技術に基づいてセキュリティ制御を実装します。フィルターチェーンを通じてクライアントリクエストをインターセプトし、それらを認証および認可します。 Spring Security で最も一般的に使用されるフィルターは DelegatingFilterProxy で、クライアントのリクエストを Spring Security の FilterChainProxy に引き渡して処理できます。 Spring Security の FilterChainProxy は、リクエスト URL の一致ルールに基づいて、処理する対応する FilterChain を選択する役割を果たします。各 FilterChain には一連のフィルターが含まれており、各フィルターは ID 認証、認可、CSRF 攻撃の防止などの特定のセキュリティ制御操作を実行する役割を担います。
3. Spring Security の設定
以下は Spring Security 設定ファイルの使用例です:
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth .inMemoryAuthentication() .withUser("user").password("{noop}password").roles("USER") .and() .withUser("admin").password("{noop}password").roles("USER", "ADMIN"); } @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") .anyRequest().authenticated() .and() .formLogin() .and() .logout() .logoutUrl("/logout") .logoutSuccessUrl("/login"); } }
上記の設定ファイルは 2 つのユーザー名とパスワードを定義します。対応する役割。このうち、{noop} はプレーン テキストのパスワード ストレージを使用することを意味します。実際の開発では、暗号化アルゴリズムを使用してパスワードを暗号化して保存することをお勧めします。認証と認可については、構成に authorizeRequests メソッドを使用できます。上記の構成では、/admin/** へのアクセス要求は、ADMIN ロールを持つユーザーのみがアクセスできます。その他のリクエストの場合は、認証のみが必要です。 Spring Securityではフォーム認証機能も提供しており、formLoginメソッドを呼び出して設定し、logoutメソッドを使用してログアウト機能を実装します。
4. ID 認証と認可に Spring Security を使用する
次は ID 認証と認可を含むサンプル コードです:
@RestController @RequestMapping("/api") public class ApiController { @GetMapping("/hello") public String hello() { return "Hello, world!"; } @GetMapping("/admin") public String admin() { return "Welcome, admin!"; } }
上記のコードには Hello World API が含まれていますおよび 管理者権限を必要とする API。 Spring Security を使用してこれらの API でセキュリティ制御を実行するには、WebSecurityConfigurerAdapter から継承するクラスを作成し、configure メソッドを実装する必要があります。
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/api/admin").hasRole("ADMIN") .anyRequest().authenticated() .and() .formLogin(); } @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth .inMemoryAuthentication() .withUser("user").password("{noop}password").roles("USER") .and() .withUser("admin").password("{noop}password").roles("USER", "ADMIN"); } }
上記のコードでは、Spring Security の inMemoryAuthentication メソッドを使用して 2 人のユーザーを作成しました1 つは USER ロールを使用し、もう 1 つは ADMIN および USER ロールを使用します。 configure メソッドでは、authorizeRequests メソッドを使用して、ADMIN ロールを持つユーザーのみにアクセスを許可するように /api/admin API を構成し、anyRequest を使用して他のリクエストに認証が必要であるように構成します。最後に、formLogin メソッドを使用してフォーム認証機能を構成します。
上記の設定を使用した後、ユーザーが ID 認証を必要とする API にアクセスすると、Spring Security はデフォルトのログイン ページにリダイレクトされ、正しいユーザー名とパスワードを入力すると、認証を取得して API にアクセスできるようになります。許可が必要です。
5. 概要
この記事では、Java API 開発におけるセキュリティ制御に Spring Security を使用する方法を紹介し、Spring Security の基本原理、構成、使用法について詳しく説明します。 Spring Security は、Java アプリケーションに完全な ID 認証および認可機能を提供する、強力で使いやすく、柔軟で拡張可能なセキュリティ フレームワークであり、プログラマによる詳細な研究と適用に価値があります。
以上がJava API開発におけるセキュリティ制御にSpringSecurityを使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。