Sping boot登录管理

本文介绍了如何在Spring Boot中结合JWT实现用户登录管理,包括JWT的概念、优缺点、登录流程,以及如何通过Filter进行登录拦截、密码加密验证、JWT工具类的创建等关键步骤。文中还提到了JWT与Redis的结合使用来解决JWT的安全性和续签问题。
摘要由CSDN通过智能技术生成

其实用户登录拦截的这块不想这么早写,加个登录后面好多东西就要考虑登录状态了,我其实想把这个系列写成非必要关系,解耦性比较强的系列。但是,写完redis,总是感觉登录是对它最简单的实践,那就加上吧,反正后面很多文章也会用到,但大多文章我仍会不考虑登录状态。

这里只是讲明白登录机制,如何实现。实际使用中会考虑很多别的,例如用户权限,登录机制限制等等~这里就先不做过多的叙述。
这里只讲技术和实现,不讲任何业务场景哈,牵扯到场景的问题就会复杂N倍,而且通用性往往不尽人意~

本文依赖于redis和mybatis plus,这些都是最基础的模块,所以都放在最前面写了,大家可以线过一下相关的文章。

【笑小枫的SpringBoot系列】【八】SpringBoot集成Redis

【笑小枫的SpringBoot系列】【三】SpringBoot集成Mybatis Plus

本文是基于jwt+redis来实现。接下来我们一起看看吧

什么是JWT

什么是JWT,JWT(全称:Json Web Token)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。 该信息可以被验证和信任,因为它是数字签名的。

上面说法比较文绉绉,简单点说就是一种认证机制,让后台知道该请求是来自于受信的客户端。

JWT的优点

  • json格式的通用性,所以JWT可以跨语言支持,比如Java、JavaScript、PHP、Node等等。
  • 可以利用Payload存储一些非敏感的信息。
  • 便于传输,JWT结构简单,字节占用小。
  • 不需要在服务端保存会话信息,易于应用的扩展。

JWT的缺点

  • 安全性没法保证,所以jwt里不能存储敏感数据。因为jwt的payload并没有加密,只是用Base64编码而已。
  • 无法中途废弃。因为一旦签发了一个jwt,在到期之前始终都是有效的,如果用户信息发生更新了,只能等旧的jwt过期后重新签发新的jwt。
  • 续签问题。当签发的jwt保存在客户端,客户端一直在操作页面,按道理应该一直为客户端续长有效时间,否则当jwt有效期到了就会导致用户需要重新登录。

补偿JWT的缺点

  • 针对JWT的缺点,我们在使用的过程中,只储存常用的无敏感数据,比如用户ID,用户角色等。
  • 中途废弃和续签问题,通过和redis配合使用,将token返回时,同步保存redis,通过控制token在redis的有效期来进行控制。
  • 还可以通过统计redis有效数据,对在线用户进行统计或强制下线等操作。

用户登录流程

以用户登录功能为例,程序流程如下:

用户登录

笑小枫-www.xiaoxiaofeng.site

token认证访问

笑小枫-www.xiaoxiaofeng.site

注:系统中采用JWT对用户登录授权验证。

基于Token的身份验证流程

使用基于Token的身份验证,在服务端不需要存储用户的登录记录。大概的流程是这样的:

1、客户端使用用户名或密码请求登录;

2、服务端收到请求,去验证用户名与密码;

3、验证成功后,服务端会使用JWT签发一个Token,保存到Redis中,同时再把这个Token发送给客户端;

4、客户端收到Token以后可以把它存储起来,比如放在Cookie里或者Local Storage里;

5、客户端每次向服务端请求资源的时候需要在请求Header里面带着服务端签发的Token;

6、服务端收到请求,然后去验证客户端请求里面带着的Token,如果验证成功,就向客户端返回请求的数据。验证失败,返回失败原因。

功能实现

自动生成的User.javaUserMapper.javaUserMapper.xml...就不贴代码了,没有业务代码,且占的篇幅过大。在SpringBoot集成Mybatis Plus文章中创建过就可以忽略了哈~

代码生成见SpringBoot集成Mybatis Plus一文。

涉及到的表sql

SpringBoot集成Mybatis Plus文章中创建过的就可以忽略了

CREATE TABLE `usc_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `account` varchar(30) DEFAULT NULL COMMENT '用户账号',
  `user_name` varchar(30) DEFAULT NULL COMMENT '用户姓名',
  `nick_name` varchar(30) DEFAULT NULL COMMENT '用户昵称',
  `user_type` varchar(2) DEFAULT '00' COMMENT '用户类型(00系统用户,01小程序用户)',
  `email` varchar(50) DEFAULT '' COMMENT '用户邮箱',
  `phone` varchar(11) DEFAULT '' COMMENT '手机号码',
  `sex` char(1) DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)',
  `avatar` varchar(100) DEFAULT '' COMMENT '头像地址',
  `salt` varchar(32) DEFAULT NULL COMMENT '用户加密盐值',
  `password` varchar(100) DEFAULT '' COMMENT '密码',
  `status` char(1) DEFAULT '0' COMMENT '帐号状态(0正常 1停用)',
  `create_id` bigint(20) DEFAULT NULL COMMENT '创建人id',
  `create_name` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_id` bigint(20) DEFAULT NULL COMMENT '更新人id',
  `update_name` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `delete_flag` tinyint(1) DEFAULT '0' COMMENT '删除标志',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='用户中心-用户信息表';

引入依赖

首先我们在pom文件中引入依赖

<!-- 引入JWT相关 -->
<dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>3.18.3</version>
</dependency>

通用类

先把我们的通用类创建一下,一些常量,我们统一放在一个配置中,方便日后维护。

  • 在config.bean创建通用类GlobalConfig.java
package com.maple.demo.config.bean;

/**
 * @author 笑小枫
 * @date 2022
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot是一个Java的开源框架,它提供了一个快速构建基于Spring的应用程序的方式。它简化了Spring应用程序的开发,并且集成了大量的其他Spring项目。Spring Boot后台管理源码是Spring Boot框架的后台管理系统的源代码。这个后台管理系统可以用于管理和监控Spring Boot应用程序的运行情况,包括配置管理、日志跟踪、错误处理、性能监控等功能。 Spring Boot后台管理源码的核心部分包括一个基于Spring框架的Web应用程序,它可以通过浏览器访问,并且提供了用户界面来管理Spring Boot应用程序。这个后台管理系统通常包括多个模块,比如用户管理、权限管理、日志管理、监控管理等模块,每个模块都有对应的源代码和配置。 在Spring Boot后台管理源码中,可以看到大量的Java代码、HTML模板、样式表、JavaScript代码等。这些源代码主要负责实现后台管理系统的功能,比如通过Java代码来处理用户请求,调用Spring Boot应用程序的接口来获取数据,通过HTML模板和JavaScript代码来实现用户界面等。 除了源代码之外,还有一些配置文件和资源文件,比如Spring Boot应用程序的配置文件、日志文件、静态资源文件等。这些文件也是后台管理系统的重要组成部分,它们的内容会影响后台管理系统的运行和表现。 总的来说,Spring Boot后台管理源码是实现Spring Boot框架后台管理系统的关键部分,它包括了多个模块的源代码、配置文件和资源文件,用于管理和监控Spring Boot应用程序的运行情况。通过研究和理解这些源码,可以帮助开发者更好地理解Spring Boot框架的实现原理,并且可以为自己的项目开发提供参考和借鉴。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值