Java の認証および認可フレームワークを使用してユーザー認証と権限管理を実装するにはどうすればよいですか?
Java の認証および認可フレームワークを使用してユーザー認証と権限管理を実装するにはどうすればよいですか?
はじめに:
ほとんどのアプリケーションでは、ユーザー認証と権限管理は非常に重要な機能です。 Spring Security、Shiro など、開発者が利用できる Java の認証および認可フレームワークが多数あります。この記事では、Spring Security フレームワークを使用してユーザー認証と権限管理を実装する方法に焦点を当てます。
1. Spring Security の概要
Spring Security は強力なセキュリティ フレームワークであり、Spring フレームワークをベースにしたプラグインであり、認証および認可機能を追加するために使用できます。 Spring Securityはユーザー認証、ロール管理、権限管理など多くの機能を提供します。
2. 認証
認証は、ユーザーの身元を確認するプロセスです。 Spring Securityでは、認証プロバイダを設定することでユーザー認証を実現できます。
- 構成ファイル
まず、Spring 構成ファイルで認証プロバイダーを構成する必要があります。認証プロバイダーは、<authentication-manager>
要素を使用して定義できます。
<authentication-manager> <authentication-provider user-service-ref="userDetailsService"/> </authentication-manager>
- カスタム認証プロバイダー
次に、ユーザー名、パスワード、ロールなどのユーザーの詳細情報をロードするために、ユーザー詳細サービス クラスをカスタマイズする必要があります。UserDetailsService
インターフェイスを実装して、このクラスを実装できます。
@Service public class CustomUserDetailsService implements UserDetailsService { @Autowired private UserRepository userRepository; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User user = userRepository.findByUsername(username); if (user == null) { throw new UsernameNotFoundException("User not found with username: " + username); } return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), getAuthorities(user.getRoles())); } private Collection<? extends GrantedAuthority> getAuthorities(Collection<Role> roles) { return roles.stream().map(role -> new SimpleGrantedAuthority(role.getName())).collect(Collectors.toList()); } }
- データベース モデル
ユーザー情報を保存するデータベース テーブルを作成する必要もあります。users
とroles
という 2 つのテーブルを作成できます。
CREATE TABLE users ( id BIGINT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, password VARCHAR(100) NOT NULL ); CREATE TABLE roles ( id BIGINT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL ); CREATE TABLE user_roles ( user_id BIGINT, role_id BIGINT, FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (role_id) REFERENCES roles(id), PRIMARY KEY (user_id, role_id) );
- ユーザーログイン
ログイン ページを Spring Security ログイン ページとして構成します。
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private UserDetailsService userDetailsService; @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/").permitAll() .antMatchers("/admin/**").hasRole("ADMIN") .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") .permitAll() .and() .logout() .permitAll(); } @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } }
3. 認可
ユーザー認証が成功すると、Spring Security を使用して権限を管理できるようになります。
- 設定ファイル
URL ルールとアクセス許可を設定することで、特定の URL へのアクセス制御を実装できます。
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/admin/**").access("hasRole('ADMIN')") .anyRequest().authenticated(); } }
- アノテーション認可
アノテーションベースの認可が使用できます。
@RestController @RequestMapping("/api") public class ApiController { @PreAuthorize("hasRole('USER')") @GetMapping("/users") public List<User> getUsers() { // code here } @PreAuthorize("hasRole('ADMIN')") @PostMapping("/user") public User createUser(@RequestBody User user) { // code here } }
結論:
Spring Securityを利用すると、ユーザー認証と権限管理が簡単に実現できます。この記事では、Spring Security フレームワークを使用して認証および認可プロバイダーを構成し、ユーザー詳細サービス クラスとデータベース モデルをカスタマイズしてユーザーを認証し、URL ルールとアノテーションを構成してアクセス許可を管理する方法を紹介します。この記事が、Java の認証および認可フレームワークの理解と使用に役立つことを願っています。
参考:
- Spring Security 公式ドキュメント: https://docs.spring.io/spring-security/site/docs/5.4.1/reference/html5/
以上がJava の認証および認可フレームワークを使用してユーザー認証と権限管理を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。
