インターネットの発展に伴い、アプリケーションのセキュリティが非常に重要になっており、すべてのプログラマーはセキュリティ問題に注意を払う必要があります。 Spring フレームワークは大規模なエンタープライズ レベルのアプリケーションで広く使用されているため、Spring Boot は Web アプリケーションを開発するための非常に一般的な選択肢です。この記事では、Spring Boot を使用してセキュリティ認証と認可管理を実装する方法を学びます。
1. 認証と認可
Spring Boot のセキュリティ認証と認可の実装について説明する前に、認証と認可とは何かを理解する必要があります。
認証とは、エンティティの身元が合法であるかどうかを確認することです。 Webアプリケーションでは通常、ユーザーが正規のユーザーであるかどうかを確認するために行われます。
認可とは、エンティティが合法であることを確認した後、エンティティに特定の操作権限を付与することです。 Web アプリケーションでは、ユーザーが要求されたリソースへの適切なアクセス権を持っているかどうかを確認するのが一般的です。
2. Spring Boot セキュリティ フレームワーク
Spring Boot は、Web アプリケーションのセキュリティ認証と認可管理を簡単に実装できるセキュリティ フレームワークを提供します。 Spring Security は Spring Boot セキュリティ フレームワークの一部です。アプリケーションを安全に実行できるように構成可能なフレームワークを提供します。
#Spring Security は次の機能を提供します: 1. セキュリティの認証と認可2. HTTPS サポート3. セッション管理4. クロスドメインリクエストのサポート5. メソッドレベルの認可6. LDAP サポート7. OpenID サポート8. OAuth 2.0サポート 3. Spring Boot セキュリティ構成Spring Boot を使用してセキュリティ認証と認可を実装し始める前に、Spring Boot のセキュリティ構成を理解する必要があります。 Spring Boot は、Java 構成とアノテーションを使用してセキュリティを構成します。セキュリティ構成は、@EnableWebSecurity アノテーションが付けられたクラスで定義されてセキュリティを有効にし、WebSecurityConfigurerAdapter を継承してセキュリティを構成するクラスを定義します。 以下は、基本的な Spring Boot セキュリティ構成の例です:@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") .antMatchers("/user/**").hasAnyRole("ADMIN", "USER") .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") .permitAll() .and() .logout() .permitAll(); } @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth .inMemoryAuthentication() .withUser("admin").password("admin").roles("ADMIN") .and() .withUser("user").password("user").roles("USER"); } }
@Service public class UserDetailsServiceImp implements UserDetailsService { @Autowired private UserRepository userRepository; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User user = userRepository.findByName(username); if (user == null) { throw new UsernameNotFoundException("User not found"); } return new org.springframework.security.core.userdetails.User(user.getName(), user.getPassword(), AuthorityUtils.createAuthorityList(user.getAuthorities())); } }
@Service public class ProductService { @PreAuthorize("hasRole('ROLE_ADMIN')") public void addProduct() { // add product } @PreAuthorize("hasRole('ROLE_USER')") @PostAuthorize("returnObject.owner == authentication.name") public Product findProductByName(String name) { // find product by name } }
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private UserService userService; @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") .antMatchers("/user/**").hasAnyRole("ADMIN", "USER") .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") .permitAll() .and() .logout() .permitAll() .and() .csrf().disable() .exceptionHandling().accessDeniedHandler(accessDeniedHandler()); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userService).passwordEncoder(passwordEncoder()); } @Bean public AccessDeniedHandler accessDeniedHandler(){ return new CustomAccessDeniedHandler(); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } }
在上面的代码中,我们定义了一个UserService类来处理用户信息,并在configure()方法中使用了accessDeniedHandler()方法来定制访问被拒绝时的错误信息。
我们还实现了一个CustomAccessDeniedHandler类来自定义访问被拒绝时的响应。
最后,我们使用了PasswordEncoder来编码密码。
六、结论
在本文中,我们了解了如何使用Spring Boot实现安全认证和授权管理。我们已经讨论了Spring Boot安全框架、安全配置、身份验证提供器和授权管理等关键概念。我们还讨论了如何使用声明式和编程式授权管理。通过使用Spring Boot的安全框架,我们可以轻松地为Web应用程序提供安全性,并确保应用程序可以安全地运行。
以上がSpring Boot を使用してセキュリティ認証と認可管理を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。