Bagaimana untuk menggunakan rangka kerja pengesahan dan kebenaran dalam Java untuk melaksanakan pengesahan pengguna dan pengurusan kebenaran?
Pengenalan:
Dalam kebanyakan aplikasi, pengesahan pengguna dan pengurusan kebenaran adalah fungsi yang sangat penting. Terdapat banyak rangka kerja pengesahan dan kebenaran dalam Java yang tersedia untuk pembangun, seperti Spring Security, Shiro, dsb. Artikel ini akan menumpukan pada cara menggunakan rangka kerja Spring Security untuk melaksanakan pengesahan pengguna dan pengurusan kebenaran.
1. Pengenalan kepada Spring Security
Spring Security ialah rangka kerja keselamatan yang berkuasa Ia adalah pemalam berdasarkan rangka kerja Spring dan boleh digunakan untuk menambah fungsi pengesahan dan kebenaran. Spring Security menyediakan banyak fungsi, seperti pengesahan pengguna, pengurusan peranan, pengurusan kebenaran, dll.
2. Pengesahan
Pengesahan ialah proses mengesahkan identiti pengguna. Dalam Spring Security, pengesahan pengguna boleh dicapai dengan mengkonfigurasi penyedia pengesahan.
<authentication-manager>
. <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
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(); } }
Anda juga perlu mencipta jadual pangkalan data untuk menyimpan maklumat pengguna. Dua jadual, pengguna
dan role
, boleh dibuat.
@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 } }
boleh merealisasikan kawalan akses ke URL tertentu dengan mengkonfigurasi peraturan URL dan kebenaran akses.
Atas ialah kandungan terperinci Bagaimana untuk menggunakan rangka kerja pengesahan dan kebenaran dalam Java untuk melaksanakan pengesahan pengguna dan pengurusan kebenaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!