Java の認証および認可フレームワークを使用してユーザー認証と権限管理を実装するにはどうすればよいですか?
はじめに:
ほとんどのアプリケーションでは、ユーザー認証と権限管理は非常に重要な機能です。 Spring Security、Shiro など、開発者が利用できる Java の認証および認可フレームワークが多数あります。この記事では、Spring Security フレームワークを使用してユーザー認証と権限管理を実装する方法に焦点を当てます。
1. Spring Security の概要
Spring Security は強力なセキュリティ フレームワークであり、Spring フレームワークをベースにしたプラグインであり、認証および認可機能を追加するために使用できます。 Spring Securityはユーザー認証、ロール管理、権限管理など多くの機能を提供します。
2. 認証
認証は、ユーザーの身元を確認するプロセスです。 Spring Securityでは、認証プロバイダを設定することでユーザー認証を実現できます。
52b82e06fe430ab7919c3a04d90647be
要素を使用して定義できます。 <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) );
@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 を使用して権限を管理できるようになります。
@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 の認証および認可フレームワークの理解と使用に役立つことを願っています。
参考:
以上がJava の認証および認可フレームワークを使用してユーザー認証と権限管理を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。