Maison  >  Article  >  Java  >  Comment SpringBoot intègre rapidement SpringSecurity

Comment SpringBoot intègre rapidement SpringSecurity

WBOY
WBOYavant
2023-05-16 21:56:28921parcourir

1. Qu'est-ce que SpringSecurity ?

Spring Security est un framework de sécurité basé sur le framework Spring, qui fournit un ensemble d'API et d'outils légers pour implémenter des fonctions de sécurité courantes telles que l'authentification, l'autorisation et la prévention des attaques. Il prend en charge diverses méthodes d'authentification, telles que l'authentification de base, l'authentification par formulaire, OAuth3.0 et OpenID Connect, etc. Les développeurs peuvent le personnaliser en fonction des besoins de l'application car Spring Security dispose d'un grand nombre d'options configurables. Spring Security est devenu l'un des frameworks de sécurité les plus utilisés pour les applications d'entreprise Java.

2. Le principe de SpringSecurity

Le principe principal de Spring Security est de protéger les ressources des applications à travers la chaîne de filtrage. Différentes fonctions de sécurité sont prises en charge par différents filtres de la chaîne de filtres, tels que l'authentification, l'autorisation, la défense contre les attaques, etc.

Lorsqu'une requête parvient à l'application, elle est d'abord interceptée par le filtre le plus externe. Ce filtre transmet la requête au filtre suivant et effectue un prétraitement avant cela, comme la journalisation et la gestion des requêtes d'origine croisée, etc. Chaque filtre est exécuté séquentiellement dans la chaîne de filtres jusqu'à ce que le filtre le plus interne ait traité la demande et renvoyé une réponse.

Spring Security protège les ressources des applications en configurant des chaînes de filtres. Chaque filtre a des responsabilités différentes, telles que :

(1) AuthenticationFilter : filtre d'authentification, utilisé pour authentifier les utilisateurs.

(2) AuthorizationFilter : filtre d'autorisation, utilisé pour vérifier si l'utilisateur a l'autorisation d'accéder à une ressource.

(3) CsrfFilter : filtre CSRF (Cross-site request forgery prévention), utilisé pour empêcher les attaques CSRF.

(4) ExceptionTranslationFilter est un filtre qui gère les exceptions liées à la sécurité et est responsable de la conversion des exceptions.

(5) SessionManagementFilter : Filtre de gestion de session, utilisé pour gérer les sessions utilisateur.

Les développeurs peuvent personnaliser leurs propres politiques de sécurité en fonction des API et des outils fournis par Spring Security et les ajouter à la chaîne de filtres. Lorsqu'une application reçoit une demande, elle protégera ses ressources conformément à ces politiques de sécurité.

3 SpringBoot intègre SpringSecurity

Ajouter des dépendances

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

Configurer Spring Security

# 设置默认用户
spring.security.user.name=user
spring.security.user.password=pass

# 关闭CSRF保护
spring.security.csrf.enabled=false

Écrire une classe de configuration de sécurité. Écrivez une classe de configuration de sécurité pour configurer Spring Security. Cette classe doit étendre WebSecurityConfigurerAdapter et remplacer certaines méthodes pour configurer la sécurité.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
    // 配置用户信息
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser("user").password("{noop}pass").roles("USER");
    }
    
    // 配置HTTP请求安全性
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/public/**").permitAll() // 允许/public/**路径下的所有请求
            .anyRequest().authenticated() // 所有其他请求都需要身份验证
            .and()
            .formLogin() // 启用表单登录
            .loginPage("/login") // 指定登录页面
            .defaultSuccessUrl("/", true) // 登录成功后重定向到主页
            .permitAll() // 允许所有用户访问登录页面
            .and()
            .logout() // 启用注销
            .logoutUrl("/logout") // 注销URL
            .logoutSuccessUrl("/login") // 注销成功后重定向到登录页面
            .permitAll(); // 允许所有用户注销
    }
}

Dans la configuration ci-dessus, nous avons configuré une authentification en mémoire (en utilisant un nom d'utilisateur et un mot de passe) et une sécurité des requêtes HTTP (autorisant les requêtes sous certains chemins, exigeant une authentification pour toutes les autres requêtes et activant la connexion et la déconnexion par formulaire).

Écrivez un contrôleur. Enfin, vous devez écrire un contrôleur pour gérer les demandes de connexion et de déconnexion.

@Controller
public class LoginController {
    
    // 处理登录请求
    @GetMapping("/login")
    public String login() {
        return "login";
    }
    
    // 处理注销请求
    @PostMapping("/logout")
    public String logout() {
        return "redirect:/login?logout=true";
    }
}

Nous définissons une méthode nommée login() dans le code pour gérer la demande de page de connexion et renvoyer un modèle nommé login. La méthode logout() est utilisée pour gérer la demande de déconnexion et rediriger vers la page de connexion.

Écrire un modèle HTML. Enfin, nous devons écrire un modèle appelé login.html pour afficher la page de connexion.

<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <h2>Login</h2>
    <form action="/login" method="post">
        <div>
            <label for="username">Username:</label>
            <input type="text" id="username" name="username" required autofocus />
        </div>
    </form>
</body>
</html>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer