


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.
- Konfigurationsdatei
Zuerst muss der Authentifizierungsanbieter in der Spring-Konfigurationsdatei konfiguriert werden. Authentifizierungsanbieter können mithilfe des Elements<authentication-manager>
definiert werden.<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) );
- Benutzerdefinierter Authentifizierungsanbieter
- Als nächstes müssen Sie eine Benutzerdetails-Dienstklasse anpassen, um die detaillierten Informationen des Benutzers zu laden, wie z. B. Benutzername, Passwort, Rolle usw. Diese Klasse kann durch Implementierung der Schnittstelle
UserDetailsService
implementiert werden. - Benutzeranmeldung
Konfigurieren Sie die Anmeldeseite als Anmeldeseite von Spring Security. - Nach erfolgreicher Benutzerauthentifizierung können Sie Spring Security für die Berechtigungsverwaltung verwenden.
- rrreee
@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 } }
- 3. Autorisierung
kann die Zugriffskontrolle auf bestimmte URLs realisieren, indem URL-Regeln und Zugriffsberechtigungen konfiguriert werden.
- Sie können die annotationsbasierte Autorisierung für die Autorisierung verwenden.
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Mit der Klassenbelastung von Java wird das Laden, Verknüpfen und Initialisieren von Klassen mithilfe eines hierarchischen Systems mit Bootstrap-, Erweiterungs- und Anwendungsklassenloadern umfasst. Das übergeordnete Delegationsmodell stellt sicher

In dem Artikel wird in der Implementierung von mehrstufigem Caching in Java mithilfe von Koffein- und Guava-Cache zur Verbesserung der Anwendungsleistung erläutert. Es deckt die Einrichtungs-, Integrations- und Leistungsvorteile sowie die Bestrafung des Konfigurations- und Räumungsrichtlinienmanagements ab

In dem Artikel werden mit JPA für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden erläutert. Es deckt Setup, Entity -Mapping und Best Practices zur Optimierung der Leistung ab und hebt potenzielle Fallstricke hervor. [159 Charaktere]

In dem Artikel werden Maven und Gradle für Java -Projektmanagement, Aufbau von Automatisierung und Abhängigkeitslösung erörtert, die ihre Ansätze und Optimierungsstrategien vergleichen.

In dem Artikel werden benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning- und Abhängigkeitsmanagement erstellt und verwendet, wobei Tools wie Maven und Gradle verwendet werden.
