当前位置: 首页 > news >正文

会话跟踪方案:Cookie Session Token

什么是会话技术? 

Cookie

以登录为例,用户在浏览器中将账号密码输入并勾选自动登录,浏览器发送请求,请求头中设置Cookie:userName:'张三' ,password:'1234aa'  ,若登录成功,服务器将这个cookie保存下来,后续用户登录,服务器向客户端(即浏览器)发送之前存储的用户cookie自动登录。

 Session

底层还是用cookie,每个浏览器对应一个session,用户通过浏览器发送请求,请求头中携带sessionId来区分要访问哪个session

 令牌技术jwt

令牌格式 

前面两部分是基于Base64编码的,最后一部分是基于编码算法(这里是HS256)和密钥的 

 使用流程

以自动登录为例,用户输入账号密码后请求服务器进行登录,服务器查询数据库校验账号密码成功后生成令牌(token),并把token发给用户,浏览器要将这个令牌记录下来,后续发送请求时携带这个令牌。

后端人员需要做的事👇

编写生成token的方法,在请求响应成功后将token响应给服务端

1.导入依赖

<!--    token--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency><!--        基于java,需要引入这个--><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.4.0</version></dependency>

2.写一个JwtUtil

public class JwtUtil {private static final String secretKey="odpodpodp";//密钥  注意这个密钥不能太短private static final int  expireTime=3600*1000;//有效期为1小时   (单位:毫秒)//生成tokenpublic static String buildToken(int userId,String password){HashMap<String, Object> map = new HashMap<>();map.put("userId",userId);map.put("password",password);String token=Jwts.builder().addClaims(map)//载荷(payload  即要加密的json字符串)   不是setClaims!!.signWith(SignatureAlgorithm.HS256,secretKey)//指定加密算法和密钥.setExpiration(new Date(currentTimeMillis()+expireTime))//设置有效期为1h.compact();//生成return token;}//jwt校验public static Claims parseJwt(String token){Claims claims = (Claims) Jwts.parser().setSigningKey(secretKey)//指定密钥.parse(token).getBody();//生成json格式的mapreturn claims;}}

前端人员需要做的事👇

浏览器可以把服务器响应的token以键值对的形式存储在localStorage中

后续发送请求时携带token到后端去解析

测试一下

控制器

@RestController
//登录注册模块控制器
@RequestMapping("login")
public class LoginController {@PostMapping("/testToken")public Result testToken(@RequestBody User user){int userId = user.getUserId();String password = user.getPassword();if(true)//校验账号密码的逻辑{String token = JwtUtil.buildToken(userId, password);System.out.println("token:"+token);//测试一下解码tokenSystem.out.println("解码token...");System.out.println(JwtUtil.parseJwt(token));return new Result(Code.RETURN_TOKEN_OK,"登录成功,返回token",token);}return new Result(Code.RETURN_TOKEN_FAIL,"登录失败,请验证账号密码",null);}
}

用postman访问接口

控制台输出

exp是还有多久过期

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 9 正则表达式:Java爬虫和正则表达式、String中的正则表达式方法(基本语法7)
  • 巡检机器人的使用方法和维护保养
  • 矢量数据创建
  • VUE学习笔记 2
  • ElasticSearch 8.15.0 与 Kibana 8.15.0 尝鲜体验
  • 2 种方式申请免费 SSL 证书,阿里云 Certbot
  • CSS\JS实现页面背景气泡logo上浮效果
  • 【Mybatis】介绍+搭建+参数传递+增删改查操作+事务与连接池
  • rufus制作启动U盘启动/刻盘
  • 一些近期用的Linux命令
  • 幂等方案分析
  • 【6.0】axios的高级用法
  • 开发团队如何应对突发的技术故障和危机?
  • docker容器安装图形界面
  • 指针(二)
  • [数据结构]链表的实现在PHP中
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Joomla 2.x, 3.x useful code cheatsheet
  • js学习笔记
  • JWT究竟是什么呢?
  • PAT A1017 优先队列
  • React+TypeScript入门
  • Swift 中的尾递归和蹦床
  • vue总结
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 关于Flux,Vuex,Redux的思考
  • 微信小程序:实现悬浮返回和分享按钮
  • 微信小程序设置上一页数据
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 一文看透浏览器架构
  • 《天龙八部3D》Unity技术方案揭秘
  • ​​​​​​​​​​​​​​Γ函数
  • #QT(一种朴素的计算器实现方法)
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (1)Nginx简介和安装教程
  • (20)docke容器
  • (二)hibernate配置管理
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (十一)手动添加用户和文件的特殊权限
  • (一一四)第九章编程练习
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .Net FrameWork总结
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET 的程序集加载上下文
  • .NET 解决重复提交问题
  • .Net 垃圾回收机制原理(二)
  • .NET 项目中发送电子邮件异步处理和错误机制的解决方案
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .netcore 获取appsettings
  • [15] 使用Opencv_CUDA 模块实现基本计算机视觉程序