当前位置: 首页 > 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是还有多久过期

http://www.lryc.cn/news/430332.html

相关文章:

  • jemeter压力测试入门
  • SpringBoot3 简单集成 Spring AI 并使用
  • 【C/C++】程序设计基础知识(数据类型与表达式、控制语句、数组与结构)
  • python库——sklearn的关键组件和参数设置
  • CAS-ViT实战:使用CAS-ViT实现图像分类任务(一)
  • 处理数组下标的代码
  • 数学建模算法总结
  • 代码随想录算法训练营第五十五天 | 并查集理论基础、107. 寻找存在的路径
  • ROS_package 、CMakeLists.txt、package.xml、ROS_node之间的关系
  • 嵌入式学习----网络通信之TCP协议通信
  • 【信息学奥赛一本通】1007:计算(a+b)×c的值
  • Linux系统之部署俄罗斯方块网页小游戏(三)
  • XSS- - - DOM 破坏案例与靶场
  • Arco Design,字节跳动出品的UI库
  • 常用API:object
  • 【计算机三级-数据库技术】数据库后台编程技术
  • 线程的控制
  • WPS宏实现Sheet页拆分功能
  • 【图像超分】论文精读:AdaBM: On-the-Fly Adaptive Bit Mapping for Image Super-Resolution
  • 深信服应届生客户经理面试经验分享
  • 什么是应用交付控制器(ADC)
  • 旅游管理系统
  • AVI-Talking——能通过语音生成很自然的 3D 说话面孔
  • 走进虚拟机逃逸技术之VMware Escape漏洞CVE-2023-20872复现
  • leetcode118. 杨辉三角,老题又做
  • 进程(一)(22)
  • Excel“取消工作表保护”忘记密码并恢复原始密码
  • WPS关闭后,进程依然在后台运行的解决办法
  • SQL每日一练-0816
  • 直方图均衡化