springboot中会话技术方案cookie/session/jwt

news2024/11/15 21:30:40

会话跟踪 - 传统方案

  • cookie

    • http协议支持的技术
    • 缺点
      • 移动端app中不支持
      • 不安全,用户可以自己禁用cookie
      • cookie不能跨域
  • session

    • 存储在服务端,安全
    • 缺点
      • 服务端集群的场景下,无法使用session
      • cookie的缺点

会话跟踪 - 现代方案

  • jwt令牌
    • 优点
      • 支持pc,移动端
      • 解决集群环境下的认证问题
      • 解决服务器的存储压力
    • 缺点
      • 需要自己实现

JWT令牌的实现

在这里插入图片描述
在这里插入图片描述

代码实现

  • 测试代码
@Test
public  void testGernateJWT(){
     Map<String, Object> claims = new HashMap<>();
     claims.put("id",1);
     claims.put("username","gaofeng");
     String jwt = Jwts.builder().signWith(SignatureAlgorithm.HS256, "gaofeng")
             .setClaims(claims).setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000)).compact();//自定义内容
     log.info("jwt:{}", jwt);
     this.testParseJWT(jwt);
 }


@Test
public  void testParseJWT(String jwt) {
    Claims claims = Jwts.parser().setSigningKey("gaofeng")
            .parseClaimsJws(jwt).getBody();
    log.info("id:{}", claims.get("id"));
    log.info("username:{}", claims.get("username"));
    log.info("expiration:{}", claims.getExpiration());
}

在这里插入图片描述

  • 封装jwt方法
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import lombok.extern.slf4j.Slf4j;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Slf4j
public class JwtUtils {
    private static  String signKey = "gaofeng";
    private static  Integer expire = 1000 * 60 * 30;

    public static String gernateJWT(Map<String,Object> claims){
        String jwt = Jwts.builder().signWith(SignatureAlgorithm.HS256, signKey)
                .setClaims(claims).setExpiration(new Date(System.currentTimeMillis() + expire)).compact();//自定义内容
        log.info("jwt:{}", jwt);
        return jwt;
    }

    public static Claims parseJWT(String jwt) {
        Claims claims = Jwts.parser().setSigningKey(signKey)
                .parseClaimsJws(jwt).getBody();
        log.info("id:{}", claims.get("id"));
        log.info("username:{}", claims.get("username"));
        log.info("expiration:{}", claims.getExpiration());
        return claims;
    }
}
  • controller代码
@RestController
@Slf4j
public class LoginController {

    @Autowired
    private EmpService empService;

    @PostMapping("/login")
    public Result login(@RequestBody Emp emp){
        log.info("登录信息:{}", emp);
        Emp e = empService.login(emp);
        if(e != null){
            //登录成功,生成jwt,并下发
            Map<String, Object> claims = new HashMap<>();
            claims.put("id", emp.getId());
            claims.put("username", emp.getUsername());
            claims.put("name", emp.getName());
            String jwt = JwtUtils.gernateJWT(claims);
            return Result.success(jwt);
        }
        return Result.error("登录失败,账户或密码错误");
    }
}

在这里插入图片描述
解析jwt网站:https://www.bejson.com/jwt/
在这里插入图片描述
页面登录后返回的结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2102785.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为云征文|华为云Flexus X实例部署k3s与kuboard图形化管理工具

华为云征文&#xff5c;华为云Flexus X实例部署k3s与kuboard图形化管理工具 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体验跃级、面向中小企业和开发者打造的高品价比云服务产品。Flexus云服务器X实例是新一代面向中小企业和开发者打造的柔性算力…

Linux服务器CPU和IO的监控利器-iostat简介

目录 一.下载方式 1.1Debian和Ubuntu系统的的下载方式 1.2Centos&#xff0c;RHEL和Fedoar系统的下载方式 二.基本用法说明 三.范例 3.1显示所有设备的负载情况 3.2每隔4秒显示所有设备的负载情况 3.2.1定时不定次显示所有信息 3.2.2定时定次显示所有信息 3.3显示磁盘…

使用AI写WebSocket知识是一种怎么样的体验?

一、WebSocket基础知识 1. WebSocket概念 1.1 为什么会出现WebSocket 一般的Http请求我们只有主动去请求接口&#xff0c;才能获取到服务器的数据。例如前后端分离的开发场景&#xff0c;自嘲为切图仔的前端大佬找你要一个配置信息的接口&#xff0c;我们后端开发三下两下开…

Edge PDF 关闭 提供支持的应用Adobe Acrobat

Edge 在浏览PDF时启用 Adobe Acrobat支持后&#xff0c;对一些长PDF会出现上下滚动会出现无法正常显示PDF内容的情况。在关闭了Adobe Acrobat计算支持后&#xff0c;问题得到解决。关闭Adobe Acrobat的方式如下&#xff1a; 1. Edge地址栏输入 edge://flags &#xff0c;进入如…

Java 入门指南:Java 并发编程 —— 并发容器 ConcurrentSkipListSet

SkipList SkipList&#xff08;跳表&#xff09;是一种有序链表加多级索引数据结构&#xff0c;基于有序的单链表&#xff0c;类似于平衡二叉树&#xff0c;但其查找、插入和删除操作的时间复杂度都是 O(logN)&#xff0c;并且不需要进行旋转平衡等复杂操作。 跳表利用二分查…

【滑动窗口】将 x 减到 0 的最小操作数

将 x 减到 0 的最小操作数 将 x 减到 0 的最小操作数题目思路讲解代码书写 将 x 减到 0 的最小操作数 题目 题目链接: 将 x 减到 0 的最小操作数 思路讲解 按照题目的思路去做这一题是非常恶心的, 因此我们采用正难则反思路. 将问题转换为: 求中间某一个最长的数组长度, 使…

mybatis搭建,参数传递,增删改查事务管理

1.mybatis概述 原是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation 迁移到了 Google Code&#xff0c;随着开发团队转投Google Code 旗下&#xff0c; iBatis3.x正式更名为MyBatis。 MyBatis 是一款优秀的持久层框架。 框架就是对技术的封装&am…

Spring源码之reader、scanner

目录 1.Spring的整体启动流程 2.reader 3.Scanner ApplicationContext的三种加载应用上下文的方式&#xff08;创建Spring容器&#xff09;&#xff1a; AnnotationConfigApplicationContextClassPathXmlApplicationContextFileSystemXmlApplicationContext 1.Spring的整体…

SprinBoot+Vue阅读交流微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平…

观测云核心技术解密:eBPF Tracing 实现原理

前言 eBPF 是一种强大的内核技术&#xff0c;允许在内核中安全地执行自定义代码。通过 eBPF&#xff0c;开发者可以在不修改内核源码的情况下&#xff0c;对内核功能进行扩展和监控。eBPF Tracing 利用这一技术&#xff0c;对系统调用、内核函数等进行跟踪&#xff0c;从而实现…

X86架构(六)——移位指令与无条件转移指令

移位指令 shr 逻辑右移 逻辑右移指令会将操作数连续地向右移动指定的次数&#xff0c;移出的比特被移到标志寄存器的CF位&#xff0c;左边空出来的位置用0填充 ;目的操作数可以是8位或16位的通用寄存器或者内存单元 ;源操作数可以是数字1、8位立即数或者寄存器CL shr r/m8, …

7、Django Admin删除默认应用程序

admin文件 from django.contrib.auth.models import User, Groupadmin.site.unregister(User) admin.site.unregister(Group) 显示效果&#xff1a; 前 后

使用vscode debug cpp/python混合编程的程序(从python调用的C++编译的dll)

使用vscode debug cpp/python混合编程的程序&#xff08;从python调用的C编译的dll&#xff09; 1. 安装插件 Python C Debugger https://marketplace.visualstudio.com/items?itemNamebenjamin-simmonds.pythoncpp-debug 2. 在.vscode/launch.json中增加配置 拷贝自 https:…

K8S日志收集

本章主要讲解在 Kubernetes 集群中如何通过不同的技术栈收集容器的日志&#xff0c;包括程序直接输出到控制台日志、自定义文件日志等。 一、有哪些日志需要收集 为了更加方便的处理异常&#xff0c;日志的收集与分析极为重要&#xff0c;在学习日志收集之前&#xff0c;需要知…

矮草坪渲染尝试

本来说写unity里的&#xff0c;由于three测试方便&#xff0c;先试试three 这个图片是目标效果 可以看见草很矮&#xff0c;很密集&#xff0c;如果用instance来绘制的话&#xff0c;遭不住的 忽然发现这个效果很像绒毛效果 于是找了博客康康 https://zhuanlan.zhihu.com/p/256…

第二证券:涨停潮!传手机将使用钛金属外壳?

今天早盘&#xff0c;银行股再度重挫&#xff0c;导致上证指数、上证50纷乱创出阶段性新低&#xff0c;上证指数跌破2800点&#xff0c;小盘成长股则大面积反弹&#xff0c;创业板指、科创50等股指飘红。 盘面上&#xff0c;新式烟草、钛金属、锂矿、玻璃基板等板块涨幅居前&a…

glsl着色器学习(七)

先了解一个矩阵库twgl/m4 是一个4x4 矩阵数学转换函数的库 normalize(a, dst) 将一个向量除以它的欧几里得长度&#xff0c;归一化后返回参数"a"是一个vec3&#xff08;三维向量&#xff09;参数"dst"是用来接收结果的&#xff0c;如果不传&#xff0c;则…

【嵌入式体系结构复习资料】

选择&#xff1a; 1. 以下哪个不是嵌入式系统设计的主要目标&#xff1f;( D ) A&#xff0e;低成本 B.低功耗 C.实时要求高 D.超高性能 2&#xff0e; 嵌入式系统有别于其他系统的最大特点是&#xff08;A &#xff09;。 A&#xff0e;嵌入专用 B.高可靠 C.…

集成电路学习:什么是LCD液晶显示器

一、LCD&#xff1a;液晶显示器 LCD&#xff0c;全称Liquid Crystal Display&#xff0c;即液晶显示器&#xff0c;是一种平面超薄的显示设备。它由一定数量的彩色或黑白像素组成&#xff0c;放置于光源或者反射面前方。LCD的主要原理是以电流刺激液晶分子产生点、线、面配合背…

mysql 使用 general 开启SQL跟踪功能

查看当前状态 mysql> SHOW VARIABLES LIKE %general%; 启用 临时启用 SET GLOBAL general_logon; SET GLOBAL general_log_file/tmp/general.log; 永久启用 通过修改配置文件来启用,需要重启mysql服务 [mysqld] general_logON general_log_file/tmp/general.log 再次查看状态…