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 die Benutzerauthentifizierung und Berechtigungsverwaltung zu implementieren?

WBOY
WBOYOriginal
2023-08-02 11:49:191979Durchsuche

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.

  1. Konfigurationsdatei
    Zuerst muss der Authentifizierungsanbieter in der Spring-Konfigurationsdatei konfiguriert werden. Authentifizierungsanbieter können mithilfe des Elements 52b82e06fe430ab7919c3a04d90647be definiert werden. 52b82e06fe430ab7919c3a04d90647be元素来定义认证提供程序。
<authentication-manager>
    <authentication-provider user-service-ref="userDetailsService"/>
</authentication-manager>
  1. 自定义认证提供程序
    接下来,需要自定义一个用户细节服务类,用于加载用户的详细信息,例如用户名、密码、角色等。可以实现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());
    }
}
  1. 数据库模型
    还需要创建数据库表来存储用户信息。可以创建usersroles
  2. 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
  1. 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.
  2. @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();
        }
    }
      Datenbankmodell

      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();
          }
      }
      1. Benutzeranmeldung
        Konfigurieren Sie die Anmeldeseite als Anmeldeseite von Spring Security.
      @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
      1. Nach erfolgreicher Benutzerauthentifizierung können Sie Spring Security für die Berechtigungsverwaltung verwenden.
      Konfigurationsdatei

      kann die Zugriffskontrolle auf bestimmte URLs realisieren, indem URL-Regeln und Zugriffsberechtigungen konfiguriert werden.

      rrreee

      Anmerkungsautorisierung
        Sie können die annotationsbasierte Autorisierung für die Autorisierung verwenden.
      1. rrreee
      Fazit: 🎜Mit Spring Security können Benutzerauthentifizierung und Berechtigungsverwaltung einfach erreicht werden. In diesem Artikel wird erläutert, wie Sie mit dem Spring Security-Framework Authentifizierungs- und Autorisierungsanbieter konfigurieren, Benutzer durch Anpassen von Benutzerdetails-Dienstklassen und Datenbankmodellen authentifizieren und Berechtigungen durch Konfigurieren von URL-Regeln und Anmerkungen verwalten. Ich hoffe, dass dieser Artikel Ihnen hilft, das Authentifizierungs- und Autorisierungsframework in Java zu verstehen und zu verwenden. 🎜🎜Referenz: 🎜🎜🎜Offizielle Dokumentation von Spring Security: https://docs.spring.io/spring-security/site/docs/5.4.1/reference/html5/🎜🎜

    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!

    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn