Comment utiliser le cadre d'authentification et d'autorisation en Java pour implémenter l'authentification des utilisateurs et la gestion des autorisations ?
Introduction :
Dans la plupart des applications, l'authentification des utilisateurs et la gestion des autorisations sont des fonctions très importantes. Il existe de nombreux frameworks d'authentification et d'autorisation en Java disponibles pour les développeurs, tels que Spring Security, Shiro, etc. Cet article se concentrera sur la façon d'utiliser le framework Spring Security pour implémenter l'authentification des utilisateurs et la gestion des autorisations.
1. Introduction à Spring Security
Spring Security est un puissant framework de sécurité. Il s'agit d'un plug-in basé sur le framework Spring et peut être utilisé pour ajouter des fonctions d'authentification et d'autorisation. Spring Security fournit de nombreuses fonctions, telles que l'authentification des utilisateurs, la gestion des rôles, la gestion des autorisations, etc.
2. Authentification
L'authentification est le processus de vérification de l'identité de l'utilisateur. Dans Spring Security, l'authentification des utilisateurs peut être réalisée en configurant un fournisseur d'authentification.
52b82e06fe430ab7919c3a04d90647be
. 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
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) );
UserDetailsService
. @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(); } }
Vous devez également créer des tables de base de données pour stocker les informations utilisateur. Deux tables, users
et roles
, peuvent être créées.
@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 } }
peut réaliser le contrôle d'accès à des URL spécifiques en configurant les règles d'URL et les autorisations d'accès.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!