行业知识
SpringBoot整合SpringSecurity
2026-11-02 13:03:31
来源:互联网转载
什么是SpringSecurity?
Spring Security���Spring提供的一套web的应用安全性的完整解决方案。
SpringSecurity采用责任式链的设计模式,它的核心是一组过滤器链。
主要包括:
- 认证(Authentication):什么是认证?简单的说就是检验某个用户是否为系统合法用户,需要用户提供用户名和密码进行校验当前用户能否访问系统。
- 授权(Authorization):就是当前用户?是否具有某种权限来进行某种操作。
SpringSecurity的认证流程
- 用户在浏览器中访问一个需要认证的URL。
- Spring Security会检查用户是否已经被认证(即是否已登录)。如果用户已经认证,那么他们可以正常访问该URL。如果用户未被认证,那么他们将被重定向到loginPage()对应的URL,通常是登录页面。
- 用户在登录页面输入用户名和密码,然后点击登录按钮,发起登录请求。
- 如果请求的URL和loginProcessingUrl()一致,那么Spring Security将开始执行登录流程。否则,用户可能需要重新进行认证。
- 在执行登录流程时,首先会经过UsernamePasswordAuthenticationFilter过滤器,该过滤器会取出用户输入的用户名和密码,然后将其放入一个容器(UsernamePasswordAuthenticationToken)中。这个容器会被用于后续的认证流程。
- 接下来,UsernamePasswordAuthenticationToken会被提交给AuthenticationManager进行管理。AuthenticationManager会委托给AuthenticationProvider进行具体的认证操作。在这个过程中,可能会涉及到密码的加密和比对。
- 如果认证成功,那么用户的认证信息将被存储在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
下一篇:美国服务器端口怎么开?