小工具知识网

当前位置: 首页 > 行业知识 > SpringBoot整合SpringSecurity

行业知识

SpringBoot整合SpringSecurity

2026-11-02 13:03:31 来源:互联网转载

什么是SpringSecurity?

Spring Security���Spring提供的一套web的应用安全性的完整解决方案。

SpringSecurity采用责任式链的设计模式,它的核心是一组过滤器链。

主要包括:

  • 认证(Authentication):什么是认证?简单的说就是检验某个用户是否为系统合法用户,需要用户提供用户名和密码进行校验当前用户能否访问系统。
  • 授权(Authorization):就是当前用户?是否具有某种权限来进行某种操作。

    SpringSecurity的认证流程

    1. 用户在浏览器中访问一个需要认证的URL。
    2. Spring Security会检查用户是否已经被认证(即是否已登录)。如果用户已经认证,那么他们可以正常访问该URL。如果用户未被认证,那么他们将被重定向到loginPage()对应的URL,通常是登录页面。
    3. 用户在登录页面输入用户名和密码,然后点击登录按钮,发起登录请求。
    4. 如果请求的URL和loginProcessingUrl()一致,那么Spring Security将开始执行登录流程。否则,用户可能需要重新进行认证。
    5. 在执行登录流程时,首先会经过UsernamePasswordAuthenticationFilter过滤器,该过滤器会取出用户输入的用户名和密码,然后将其放入一个容器(UsernamePasswordAuthenticationToken)中。这个容器会被用于后续的认证流程。
    6. 接下来,UsernamePasswordAuthenticationToken会被提交给AuthenticationManager进行管理。AuthenticationManager会委托给AuthenticationProvider进行具体的认证操作。在这个过程中,可能会涉及到密码的加密和比对。
    7. 如果认证成功,那么用户的认证信息将被存储在session中,并且用户可以正常访问他们之前试图访问的URL。如果认证失败,那么用户可能会被重定向到失败URL(如果配置了的话),或者可能会看到一个错误页面

    代码示例

    简单案例

    1,引入maven依赖

                        org.springframework.boot            spring-boot-starter-security        

    2,启动服务

    3,访问 http://localhost:8080/ 会自动跳转进入登录页面 默认用户是 user  密码为服务后端启动显示的安全密码

    4,登录成功访问我们提供的接口

    5,退出登录 访问 http://localhost:8080/logout

    完整案例

    1,引入maven依赖

                        org.springframework.boot            spring-boot-starter-security        

    2,User类

    package com.security.domain;import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableId;import com.baomidou.mybatisplus.annotation.TableName;import io.swagger.annotations.ApiModelProperty;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import java.io.Serializable;/** * @Program: SpringBoot * @ClassName User * @Author: liutao * @Description: 用户类 * @Create: 2023-06-11 17:22 * @Version 1.0 **/@Data@AllArgsConstructor@NoArgsConstructor@TableName("sys_user")public class User implements Serializable {    private static final long serialVersionUID = 1L;    @TableId(type = IdType.AUTO)    @ApiModelProperty("用户id")    private Integer id;    @ApiModelProperty("用户名")    private String username;    @ApiModelProperty("密码")    private String password;    @ApiModelProperty("性别")    private int sex;    @ApiModelProperty("年龄")    private int age;}

    3,实现UserDetails接口并重写所有方法

    package com.security.domain;import com.alibaba.fastjson.annotation.JSONField;import lombok.Data;import lombok.NoArgsConstructor;import org.springframework.security.core.GrantedAuthority;import org.springframework.security.core.authority.SimpleGrantedAuthority;import org.springframework.security.core.userdetails.UserDetails;import java.util.Collection;import java.util.List;import java.util.stream.Collectors;/** * @Program: SpringBoot * @ClassName LoginUser * @Author: liutao * @Description: 登录用户 * @Create: 2023-06-11 18:17 * @Version 1.0 **/@Data@NoArgsConstructorpublic class LoginUser implements UserDetails {    private User user;    private List permissions;    @JSONField(serialize = false)    private List authorities;    public LoginUser(User user, List permissions) {        this.user = user;        this.permissions = permissions;    }    @Override    public Collection

上一篇:华硕ARTONE怎么使用U盘重装系统?

下一篇:美国服务器端口怎么开?