ホームページ  >  記事  >  Java  >  Java の認証および認可フレームワークを使用してユーザー認証と権限管理を実装するにはどうすればよいですか?

Java の認証および認可フレームワークを使用してユーザー認証と権限管理を実装するにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-08-02 11:49:191950ブラウズ

Java の認証および認可フレームワークを使用してユーザー認証と権限管理を実装するにはどうすればよいですか?

はじめに:
ほとんどのアプリケーションでは、ユーザー認証と権限管理は非常に重要な機能です。 Spring Security、Shiro など、開発者が利用できる Java の認証および認可フレームワークが多数あります。この記事では、Spring Security フレームワークを使用してユーザー認証と権限管理を実装する方法に焦点を当てます。

1. Spring Security の概要
Spring Security は強力なセキュリティ フレームワークであり、Spring フレームワークをベースにしたプラグインであり、認証および認可機能を追加するために使用できます。 Spring Securityはユーザー認証、ロール管理、権限管理など多くの機能を提供します。

2. 認証
認証は、ユーザーの身元を確認するプロセスです。 Spring Securityでは、認証プロバイダを設定することでユーザー認証を実現できます。

  1. 構成ファイル
    まず、Spring 構成ファイルで認証プロバイダーを構成する必要があります。認証プロバイダーは、52b82e06fe430ab7919c3a04d90647be 要素を使用して定義できます。
<authentication-manager>
    <authentication-provider user-service-ref="userDetailsService"/>
</authentication-manager>
  1. カスタム認証プロバイダー
    次に、ユーザー名、パスワード、ロールなどのユーザーの詳細情報をロードするために、ユーザー詳細サービス クラスをカスタマイズする必要があります。 UserDetailsS​​ervice インターフェイスを実装して、このクラスを実装できます。
@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());
    }
}
  1. データベース モデル
    ユーザー情報を保存するデータベース テーブルを作成する必要もあります。 usersroles という 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)
);
  1. ユーザーログイン
    ログイン ページを 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 を使用して権限を管理できるようになります。

  1. 設定ファイル
    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();
    }
}
  1. アノテーション認可
    アノテーションベースの認可が使用できます。
@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 の認証および認可フレームワークの理解と使用に役立つことを願っています。

参考:

  1. Spring Security 公式ドキュメント: https://docs.spring.io/spring-security/site/docs/5.4.1/reference/html5/

以上がJava の認証および認可フレームワークを使用してユーザー認証と権限管理を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。