SpringSecurity前后端分离登录认证

本文介绍了如何在SpringBoot项目中结合SpringSecurity实现前后端分离的登录认证,包括项目搭建、SpringSecurity依赖引入、登录流程、JWT的使用以及自定义登录接口和JWT过滤器的配置。通过自定义UserDetailsService和密码加密方式,实现了登录认证功能,并利用JWT生成和验证令牌,确保安全的用户授权。
摘要由CSDN通过智能技术生成

文章总结自三更草堂SpringSecurity框架教程,个人认为是B站最好用的Security+JWT讲解。

1. 项目搭建

1.1 新建SpringBoot项目

SpringBoot使用的是2.7.0版本
依赖:

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

创建一个HelloController

@RestController
@RequestMapping("/hello")
public class HelloController {

    @GetMapping
    public String hello(){
        return "hello";
    }

}

访问测试:可以看到可以访问成功

在这里插入图片描述

1.2 引入SpringSecurity依赖

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

重启项目之后发现localhost:8088/hello接口无法再次进行访问,取而代之的是Security的登录页。

在这里插入图片描述
此时的默认用户名是user,密码会在控制台输出。

2. 认证

2.1 登录流程

在这里插入图片描述

2.2 security认证流程

本质使用的是过滤器链,内部提供各种功能的过滤器。

  • 核心过滤器
    在这里插入图片描述

    1. UsernamePasswordAuthenticationFilter:处理登录页中的登录请求;
    2. ExceptionTranslationFilter:处理过滤器链中的异常;
    3. FilterSecurityInterceptor:权限校验过滤器。
  • 1.2案例认证流程:
    在这里插入图片描述

    1. Authentication:实现类,表示当前访问系统的用户,封装了相关用户信息;
    2. AuthenticationManager:定义认证Authentication方法;
    3. UserDetailsService:加载用户特定数据的核心接口;包含一个根据用户名查询用户信息的方法。
    4. UserDetails:提供核心用户信息,通过UserDetailsService根据用户名获取处理的用户信息封装成UserDetailsService对象返回,然后将信息封装到Authentication对象中。

2.3 实现思路

使用自己定义的接口去掉哟SpringSecurity中封装的类。

  • 登录流程:
    在这里插入图片描述

  • 校验过程:
    在这里插入图片描述

  • 引入redis:如果认证之后害需要通过JWT中的userid对数据库进行查询,消耗太大,可以存储入到redis中。

2.4 实现方案

  • 登录
    1. 自定义登录接口:调用ProviderManager的方法进行认证;认证通过生成JWT;将用户信息存入redis;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值