Heim >Java >javaLernprogramm >Wie verwende ich das Authentifizierungs- und Autorisierungsframework in Java, um die Benutzerauthentifizierung und Berechtigungsverwaltung zu implementieren?
Wie verwende ich das Authentifizierungs- und Autorisierungsframework in Java, um Benutzerauthentifizierung und Berechtigungsverwaltung zu implementieren?
Einführung:
In den meisten Anwendungen sind Benutzerauthentifizierung und Berechtigungsverwaltung sehr wichtige Funktionen. Entwicklern stehen in Java zahlreiche Authentifizierungs- und Autorisierungsframeworks zur Verfügung, z. B. Spring Security, Shiro usw. Dieser Artikel konzentriert sich auf die Verwendung des Spring Security-Frameworks zur Implementierung der Benutzerauthentifizierung und Berechtigungsverwaltung.
1. Einführung in Spring Security
Spring Security ist ein leistungsstarkes Sicherheitsframework, das auf dem Spring-Framework basiert und zum Hinzufügen von Authentifizierungs- und Autorisierungsfunktionen verwendet werden kann. Spring Security bietet viele Funktionen wie Benutzerauthentifizierung, Rollenverwaltung, Berechtigungsverwaltung usw.
2. Authentifizierung
Authentifizierung ist der Prozess der Überprüfung der Benutzeridentität. In Spring Security kann die Benutzerauthentifizierung durch die Konfiguration eines Authentifizierungsanbieters erreicht werden.
52b82e06fe430ab7919c3a04d90647be
definiert werden. 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
implementiert werden. @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(); } }
Sie müssen außerdem Datenbanktabellen erstellen, um Benutzerinformationen zu speichern. Es können zwei Tabellen, users
und roles
, erstellt werden.
@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 } }
kann die Zugriffskontrolle auf bestimmte URLs realisieren, indem URL-Regeln und Zugriffsberechtigungen konfiguriert werden.
Das obige ist der detaillierte Inhalt vonWie verwende ich das Authentifizierungs- und Autorisierungsframework in Java, um die Benutzerauthentifizierung und Berechtigungsverwaltung zu implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!