Maison >Java >javaDidacticiel >Comment utiliser SpringBoot SpringSecurity

Comment utiliser SpringBoot SpringSecurity

WBOY
WBOYavant
2023-05-19 17:20:08895parcourir

SpringBoot a adopté la configuration par défaut pour les utilisateurs. Il vous suffit d'introduire des dépendances pom pour démarrer rapidement Spring Security.
Objectif : Vérifier l'identité de l'utilisateur demandeur et fournir un accès sécurisé
Avantages : Basé sur Spring, facile à configurer, réduit beaucoup de code

Comment utiliser SpringBoot SpringSecurity#🎜 🎜#

La méthode de contrôle d'accès intégrée

  • permitAll() signifie que n'importe qui est autorisé à accéder à l'URL correspondante.

  • permitAll() 表示所匹配的 URL 任何人都允许访问。
  • authenticated() 表示所匹配的 URL 都需要被认证才能访问。

  • anonymous() 表示可以匿名访问匹配的 URL 。和 permitAll() 效果类似,只是设置为 anonymous() 的 url 会执行 filter 链中

  • denyAll() 表示所匹配的 URL 都不允许被访问。

  • rememberMe() 被“remember me”的用户允许访问 这个有点类似于很多网站的十天内免登录,登陆一次即可记住你,然后未来一段时间不用登录。

  • fullyAuthenticated() 如果用户不是被 remember me 的,才可以访问。也就是必须一步一步按部就班的登录才行。

角色权限判断

  • hasAuthority(String) 判断用户是否具有特定的权限,用户的权限是在自定义登录逻辑

  • hasAnyAuthority(String ...) 如果用户具备给定权限中某一个,就允许访问

  • hasRole(String) 如果用户具备给定角色就允许访问。否则出现 403

  • hasAnyRole(String ...) 如果用户具备给定角色的任意一个,就允许被访问

  • hasIpAddress(String) 如果请求是指定的 IP 就运行访问。可以通过 request.getRemoteAddr() 获取 ip 地址

引用 Spring Security

Pom 文件中添加

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>vipsoft-parent</artifactId>
        <groupId>com.vipsoft.boot</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>vipsoft-security</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.3.7</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

运行后会自动生成 password 默认用户名为: user

Comment utiliser SpringBoot SpringSecurity

默认配置每次都启动项目都会重新生成密码,同时用户名和拦截请求也不能自定义,在实际应用中往往需要自定义配置,因此接下来对Spring Security进行自定义配置。

配置 Spring Security (入门)

在内存中(简化环节,了解逻辑)配置两个用户角色(admin和user),设置不同密码;
同时设置角色访问权限,其中admin可以访问所有路径(即/*),user只能访问/user下的所有路径。

自定义配置类,实现WebSecurityConfigurerAdapter接口,WebSecurityConfigurerAdapter

authenticated() signifie que l'URL correspondante doit être authentifiée avant l'accès.

anonymous() signifie que l'URL correspondante est accessible de manière anonyme. L'effet est similaire à permitAll(), sauf que l'URL définie sur anonyme() exécutera la chaîne de filtres

denyAll() pour représentent la correspondance. Aucune des URL n'est accessible.

Comment utiliser SpringBoot SpringSecurity

rememberMe() Les utilisateurs qui se souviennent de moi sont autorisés à accéder à ce site Web, qui est similaire à de nombreux sites Web. devez vous connecter pendant dix jours. Connectez-vous une fois. Il peut se souvenir de vous, vous n'avez donc pas besoin de vous connecter pendant un certain temps. #🎜🎜##🎜🎜##🎜🎜#fullyAuthenticated() L'utilisateur ne peut accéder que s'il ne se souvient pas de moi. C'est-à-dire que vous devez vous connecter étape par étape. #🎜🎜##🎜🎜#Jugement de l'autorité de rôle#🎜🎜##🎜🎜##🎜🎜##🎜🎜#hasAuthority(String) Déterminer si l'utilisateur dispose d'autorisations spécifiques, les autorisations de l'utilisateur sont dans la logique de connexion personnalisée #🎜🎜##🎜🎜##🎜🎜#hasAnyAuthority(String ...) Si l'utilisateur dispose des autorisations données Un certain, l'accès est autorisé #🎜🎜##🎜🎜##🎜🎜#hasRole(String) L'accès est autorisé si l'utilisateur a le rôle donné. Sinon, 403#🎜🎜##🎜🎜##🎜🎜#hasAnyRole(String ...) Si l'utilisateur a l'un des rôles donnés, l'accès est autorisé#🎜🎜 ##🎜🎜##🎜🎜#hasIpAddress(String) Si la demande concerne l'adresse IP spécifiée, exécutez l'accès. Vous pouvez obtenir l'adresse IP via request.getRemoteAddr()#🎜🎜##🎜🎜#Quote Spring Security#🎜🎜##🎜🎜# Ajouter #🎜🎜#
package com.vipsoft.web.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    /**
     * 配置用户身份的configure()方法
     *
     * @param auth
     * @throws Exception
     */
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        //简化操作,将用户名和密码存在内存中,后期会存放在数据库、Redis中
        auth.inMemoryAuthentication()
                .passwordEncoder(passwordEncoder)
                .withUser("admin")
                .password(passwordEncoder.encode("888"))
                .roles("ADMIN")
                .and()
                .withUser("user")
                .password(passwordEncoder.encode("666"))
                .roles("USER");
    }
    /**
     * 配置用户权限的configure()方法
     * @param http
     * @throws Exception
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                //配置拦截的路径、配置哪类角色可以访问该路径
                .antMatchers("/user").hasAnyRole("USER")
                .antMatchers("/*").hasAnyRole("ADMIN")
                //配置登录界面,可以添加自定义界面, 没添加则用系统默认的界面
                .and().formLogin();
    }
}
package com.vipsoft.web.controller;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DefaultController {
    @GetMapping("/")
    @PreAuthorize("hasRole(&#39;ADMIN&#39;)")
    public String demo() {
        return "Welcome";
    }
    @GetMapping("/user/list")
    @PreAuthorize("hasAnyRole(&#39;ADMIN&#39;,&#39;USER&#39;)")
    public String getUserList() {
        return "User List";
    }
    @GetMapping("/article/list")
    @PreAuthorize("hasRole(&#39;ADMIN&#39;)")
    public String getArticleList() {
        return "Article List";
    }
}
#🎜🎜# à le fichier Pom Après l'exécution, le mot de passe sera automatiquement généré. Le nom d'utilisateur par défaut est : user#🎜🎜##🎜🎜#SpringBoot Comment utiliser SpringSecurity#🎜🎜##🎜🎜#La configuration par défaut régénérera le mot de passe à chaque démarrage du projet. En même temps, le nom d'utilisateur et l'interception La demande ne peut pas être personnalisée. Dans les applications réelles, une configuration personnalisée est souvent requise, alors personnalisez ensuite Spring Security. #🎜🎜#

Configuration de Spring Security (Mise en route)

#🎜🎜#Configurez deux rôles d'utilisateur (administrateur et utilisateur) en mémoire (pour simplifier le processus et comprendre la logique) et définir des mots de passe différents #🎜 ; 🎜# En même temps, définissez les autorisations d'accès au rôle, où l'administrateur peut accéder à tous les chemins (c'est-à-dire /*), et l'utilisateur ne peut accéder qu'à tous les chemins sous /user. #🎜🎜##🎜🎜# Personnalisez la classe de configuration et implémentez l'interface WebSecurityConfigurerAdapter. Il existe deux méthodes configure() utilisées dans l'interface WebSecurityConfigurerAdapter, dont l'une configure le. identité de l'utilisateur. , une autre configuration des autorisations de l'utilisateur : #🎜🎜##🎜🎜# méthode configure() pour configurer l'identité de l'utilisateur : #🎜🎜##🎜🎜#SecurityConfig#🎜🎜#rrreee#🎜🎜#Ajouter des tests d'interface #🎜🎜 #rrreee#🎜🎜##🎜🎜##🎜🎜#

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