Heim  >  Artikel  >  Java  >  So verwenden Sie Spring Boot zur Implementierung der Sicherheitsauthentifizierung und Autorisierungsverwaltung

So verwenden Sie Spring Boot zur Implementierung der Sicherheitsauthentifizierung und Autorisierungsverwaltung

王林
王林Original
2023-06-22 12:53:201907Durchsuche

Mit der Entwicklung des Internets ist die Sicherheit von Anwendungen sehr wichtig geworden und jeder Programmierer muss auf Sicherheitsaspekte achten. Da das Spring-Framework in großen Unternehmensanwendungen weit verbreitet ist, ist Spring Boot eine sehr beliebte Wahl für die Entwicklung von Webanwendungen. In diesem Artikel erfahren Sie, wie Sie mit Spring Boot die Sicherheitsauthentifizierung und Autorisierungsverwaltung implementieren.

1. Authentifizierung und Autorisierung

Bevor wir mit der Diskussion der Spring Boot-Implementierung der Sicherheitsauthentifizierung und -autorisierung beginnen, müssen wir verstehen, was Authentifizierung und Autorisierung sind.

Mit der Authentifizierung soll bestätigt werden, ob die Identität einer Entität legal ist. In Webanwendungen dient dies normalerweise der Bestätigung, ob der Benutzer ein legitimer Benutzer ist.

Autorisierung bedeutet, einem Unternehmen bestimmte Betriebsgenehmigungen zu erteilen, nachdem bestätigt wurde, dass es rechtmäßig ist. In Webanwendungen ist es üblich, zu bestätigen, dass der Benutzer über entsprechende Zugriffsrechte für die angeforderte Ressource verfügt.

2. Spring Boot Security Framework

Spring Boot bietet ein Sicherheitsframework, das die Sicherheitsauthentifizierung und Autorisierungsverwaltung für Webanwendungen einfach implementieren kann. Spring Security ist Teil des Spring Boot-Sicherheitsframeworks. Es bietet ein konfigurierbares Framework, um sicherzustellen, dass Anwendungen sicher ausgeführt werden können.

Spring Security bietet die folgenden Funktionen:

2. HTTPS-Unterstützung

4. Unterstützung für domänenübergreifende Anfragen

6. LDAP-Unterstützung

7, OpenID-Unterstützung

8, OAuth 2.0-Unterstützung

3. Spring Boot-Sicherheitskonfiguration

Bevor wir mit der Verwendung von Spring Boot zur Implementierung der Sicherheitsauthentifizierung und -autorisierung beginnen, müssen wir die Sicherheitskonfiguration von Spring Boot verstehen.

Spring Boot verwendet Java-Konfiguration und Anmerkungen, um die Sicherheit zu konfigurieren. Die Sicherheitskonfiguration wird in einer Klasse definiert, die mit @EnableWebSecurity annotiert ist, um Sicherheit zu aktivieren, und dann eine Klasse definiert, die von WebSecurityConfigurerAdapter erbt, um Sicherheit zu konfigurieren.

Hier ist ein Beispiel für eine grundlegende Spring Boot-Sicherheitskonfiguration:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/admin/**").hasRole("ADMIN")
                .antMatchers("/user/**").hasAnyRole("ADMIN", "USER")
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .permitAll();
    }
    
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication()
                .withUser("admin").password("admin").roles("ADMIN")
                .and()
                .withUser("user").password("user").roles("USER");
    }
}

In der obigen Konfiguration aktivieren wir Sicherheit mithilfe der Annotation @EnableWebSecurity und definieren dann eine Klasse, die von WebSecurityConfigurerAdapter erbt. Die Methode

configure() wird aufgerufen, wenn die Anwendung beginnt, die Regeln für die HTTP-Anforderungssicherheit festzulegen. In diesem Beispiel definieren wir drei Regeln:

1 Auf jede URL, die mit /admin/ beginnt, dürfen nur Benutzer mit der Rolle ADMIN zugreifen.

2. Jede URL, die mit /user/ beginnt, ermöglicht Benutzern mit der Rolle ADMIN oder USER den Zugriff.

3. Alle anderen Anfragen erfordern eine Authentifizierung.

Die formLogin()-Methode definiert den Speicherort des Anmeldeformulars und ermöglicht allen Benutzern den Zugriff darauf.

Die Methode logout() legt die Abmeldefunktion fest und ermöglicht den Zugriff für alle Benutzer. Die

configureGlobal()-Methode konfiguriert ein In-Memory-Authentifizierungsschema, einschließlich Benutzername und Passwort sowie zugewiesener Rollen.

Dies ist nur ein einfaches Beispiel. Komplexere Sicherheitskonfigurationen können mithilfe verschiedener Spring Security-Optionen eingerichtet werden.

4. Authentifizierungsanbieter

Im obigen Konfigurationsbeispiel haben wir ein In-Memory-Authentifizierungsschema verwendet. In der Realität verwenden wir jedoch normalerweise eine Datenbank zum Speichern von Benutzerinformationen. Spring Security stellt uns Authentifizierungsanbieter für die Authentifizierung zur Verfügung.

In Spring Security ist ein Authentifizierungsanbieter eine Schnittstelle, in der die Methode „authenticate()“ implementiert werden muss, um die Authentifizierung durchzuführen. Authentifizierungsanbieter können In-Memory-, relationale Datenbank- oder LDAP-basierte Anbieter usw. sein.

Hier ist ein Beispiel für einen datenbankbasierten Authentifizierungsanbieter:

@Service
public class UserDetailsServiceImp implements UserDetailsService {
    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        User user = userRepository.findByName(username);
        if (user == null) {
            throw new UsernameNotFoundException("User not found");
        }
        return new org.springframework.security.core.userdetails.User(user.getName(), user.getPassword(),
                AuthorityUtils.createAuthorityList(user.getAuthorities()));
    }
}

Im obigen Code haben wir eine UserDetailsServiceImp-Klasse definiert, die die UserDetailsService-Schnittstelle implementiert. Die Methode „loadUserByUsername()“ lädt Benutzerinformationen aus der Datenbank und gibt das UserDetails-Objekt von Spring Security zurück, das Benutzername, Passwort und Autorisierung enthält.

5. Berechtigungsverwaltung

In Spring Boot können wir Spring Security für die rollenbasierte Berechtigungsverwaltung verwenden. Spring Security bietet zwei Methoden zur Berechtigungsverwaltung: deklarativ und programmatisch.

1. Deklarativ

Bei der deklarativen Autorisierung können wir die Annotationen @PreAuthorize und @PostAuthorize verwenden, um Zugriffskontrollregeln festzulegen. @PreAuthorize wird verwendet, um die Bedingungen anzugeben, die vor dem Zugriff auf die Methode erfüllt sein müssen, während @PostAuthorize verwendet wird, um die Bedingungen anzugeben, die vor der Rückkehr erfüllt sein sollten.

Das Folgende ist ein Beispiel für eine deklarativbasierte Autorisierungsverwaltung:

@Service
public class ProductService {
    @PreAuthorize("hasRole('ROLE_ADMIN')")
    public void addProduct() {
        // add product
    }
    
    @PreAuthorize("hasRole('ROLE_USER')")
    @PostAuthorize("returnObject.owner == authentication.name")
    public Product findProductByName(String name) {
        // find product by name
    }
}

Im obigen Code haben wir @PreAuthorize-Anmerkungen zu den Methoden addProduct() und findProductByName() hinzugefügt, um Zugriffskontrollregeln festzulegen.

In der Methode addProduct() beschränken wir Benutzer mit der Rolle ROLE_ADMIN auf den Zugriff auf diese Methode.

In der Methode findProductByName() beschränken wir Benutzer mit der Rolle ROLE_USER auf den Zugriff auf die Methode und legen mithilfe der Annotation @PostAuthorize eine weitere Zugriffskontrollregel fest, um sicherzustellen, dass nur der Eigentümer des zurückgegebenen Produkts authentifiziert wird. Das Produkt wird nur zurückgegeben wenn die Benutzer gleich sind.

2. Programmatisch

Bei der programmgesteuerten Autorisierung können wir die Spring Security API verwenden, um Zugriffskontrollregeln festzulegen.

Das Folgende ist ein Beispiel für die programmgesteuerte Berechtigungsverwaltung:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private UserService userService;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/admin/**").hasRole("ADMIN")
                .antMatchers("/user/**").hasAnyRole("ADMIN", "USER")
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .permitAll()
                .and()
            .csrf().disable()
            .exceptionHandling().accessDeniedHandler(accessDeniedHandler());
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userService).passwordEncoder(passwordEncoder());
    }
    
    @Bean
    public AccessDeniedHandler accessDeniedHandler(){
        return new CustomAccessDeniedHandler();
    }
    
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

在上面的代码中,我们定义了一个UserService类来处理用户信息,并在configure()方法中使用了accessDeniedHandler()方法来定制访问被拒绝时的错误信息。

我们还实现了一个CustomAccessDeniedHandler类来自定义访问被拒绝时的响应。

最后,我们使用了PasswordEncoder来编码密码。

六、结论

在本文中,我们了解了如何使用Spring Boot实现安全认证和授权管理。我们已经讨论了Spring Boot安全框架、安全配置、身份验证提供器和授权管理等关键概念。我们还讨论了如何使用声明式和编程式授权管理。通过使用Spring Boot的安全框架,我们可以轻松地为Web应用程序提供安全性,并确保应用程序可以安全地运行。

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Spring Boot zur Implementierung der Sicherheitsauthentifizierung und Autorisierungsverwaltung. 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