首页 > 其他分享 >Session,JWT使用总结

Session,JWT使用总结

时间:2023-06-29 11:57:07浏览次数:45  
标签:总结 令牌 String jwt JWT Session import claims

01.Session:

优点:Session是存储在服务端的,安全
缺点:
服务器集群环境下无法直接使用Session
移动端APP(Android、IOS)中无法使用Cookie
用户可以自己禁用Cookie
Cookie不能跨域

02.令牌技术:JWT令牌 JSON Web Token (官网:https://jwt.io/)

1.定义了一种简洁的、自包含的格式,用于在通信双方以json数据格式安全的传输信息。由于数字
签名的存在,这些信息是可靠的。

2.JWT的组成: (JWT令牌由三个部分组成,三个部分之间使用英文的点来分割)
第一部分:Header(头), 记录令牌类型、签名算法等。 例如:
{"alg":"HS256","type":"JWT"}
第二部分:Payload(有效载荷),携带一些自定义信息、默认信息等。 例如:
{"id":"1","username":"Tom"}
第三部分:Signature(签名),防止Token被篡改、确保安全性。将header、payload,并加
入指定秘钥,通过指定签名算法计算而来

3.优点:
支持PC端、移动端
解决集群环境下的认证问题
减轻服务器的存储压力(无需在服务器端存储)
缺点:需要自己实现(包括令牌的生成、令牌的传递、令牌的校验)

4.JWT令牌生成和校验
4.1 添加依赖

io.jsonwebtoken jjwt 0.9.1

---------demo---------
package com.alex.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.stereotype.Component;

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

public class JwtUtils {
private static String signKey="chenalex";
private static long expire=2436001000;

/**
 * 生产jwt令牌
 * @param claims
 * @return
 */
public static String generateJWT(Map<String,Object> claims,long expires){
    expires=expire;
    String jwt= Jwts.builder()
            .addClaims(claims)
            .signWith(SignatureAlgorithm.HS256,signKey)
            .setExpiration(new Date(System.currentTimeMillis()+ expires))
            .compact();
    return jwt;
}

/**
 * 解析jwt
 * 解析并返回jwt第2部分的payload数据
 */
public static Claims parseJWT(String jwt){
    Claims claims=Jwts.parser()
            .setSigningKey(signKey)
            .parseClaimsJws(jwt)
            .getBody();
    return claims;
}

}
---------------call------------------
@Test
public void testJWT(){
Map<String,Object> claims=new HashMap<>();
claims.put("id",1);
claims.put("name","alexchen");

   String token = JwtUtils.generateJWT(claims,3600);
   System.out.println(token);
   
    Claims claimss =  JwtUtils.parseJWT(token);
    System.out.println(claimss);
}

标签:总结,令牌,String,jwt,JWT,Session,import,claims
From: https://www.cnblogs.com/chenshaojun2008/p/17513849.html

相关文章

  • 20230628习题总结
    1.P6891[JOISC2020]ビルの飾り付け4本题如果按照最直接的方式dp时空都是\(O(n^2)\)。可以用一个常用的优化:交换下标和值,用dp数组维护一个集合(可以证明是一个区间,于是用左右端点表示)。2.P7216[JOISC2020]美味しい美味しいハンバーグ正解是2-SAT,但是太麻烦,码量大难想。其......
  • 题目集6-8的总结性Blog
    一、前言第6-8次的pta没有延续之前的菜单计价程序,主要是围绕课程成绩统计程序进行的。第六次大作业就是成绩统计程序,第七次大作业则增加了对HashMap和多态的一个考察,第八次大作业则是增加了对Arraylist部分知识点的考察。这三次作业不再是菜单的设计,而是改为学生成绩的统计,但还是......
  • Blog PTA 6-9总结
    关于成绩统计程序类的结构理解(老师提供的结构代码)这里以课程成绩统计程序-3为代表,本质上三个题目的差别度不大,核心思想都没用太大处。尤其和前面的点菜系统有很强的相似性。输入结构课程名字性质考核方式权重的个数(1,2,4-9不等)考试两个成绩,两个权重考察一个成绩一个权......
  • PTA6-8总结报告
    前言:题目集六涉及的知识点有:1.利用Arrays.sort()方法根据某些标准对对象进行排序。2.异常处理(NumberFormatException)和条件语句来检查不正确的输入格式。3.类和对象:代码中使用了Class、Student和Lesson等类来表示班级、学生和课程。4.数组:代码使用了不同类型的数组,如班级、学生和......
  • 每日总结2023年6月28日
    今日学习:计算机体系结构(Flynn分类法):单指令流单数据流、单指令流多数据流、多指令流单数据流(理论存在,实际不存在)、多指令流多数据流;CISC和RISC两种不同指令类型的区别比较;计算机参差化存储结构:运行速度从快到慢依次是CPU(寄存器)、Cache、内存(主存)、外存(辅存),而内存大小则是相反;Cache......
  • 题目集6~8总结
    一.前言Java编程语言是当今最流行的编程语言之一,由于其跨平台性、面向对象性和安全性等特点,受到广泛的应用。作为一名计算机专业的学生,在学习Java编程语言时,我们需要完成多个作业来巩固所学知识。在前三次Java作业中,我们已经学习了Java的基础知识和常用技术,通过完成这些作业,我们......
  • 第六到第八次题目集总结
    第六到第八次题目集总结一、题目集六课程成绩统计程序-1第一题题目内容:课程成绩统计程序-1publicclassGrade{privatefinalCourseGradecourseGrade;privatefinalSubGradesubGrade;publicGrade(CourseGradecourseGrade,SubGradesubGrade){......
  • 6-8次PTA题目总结blog
    前言:题目集1~3的知识点、题量、难度等情况如下:知识点:JAVA基础,基础算法,面向对象程序设计题量:共计3道题目难度:题目从易到难,逐层递进,分别为考察Java容器的理解、掌握与运用。设计与分析: 1importjava.util.*;2importjava.util.regex.Pattern;3impo......
  • PTA题目集6-8总结
    (1)前言题目集6只有一个课程成绩统计程序-1,难点总体来说中等,考察的也是对java类的定义和使用,以及如何设计能使程序往后修改方便,可以根据给出的类图来进行设计。题目集7中有上一次程序的进阶版课程成绩统计程序-2,相比于之前添加了实验这一课程性质,总的来说改变不大,只需要在......
  • pta题目集6~8次总结性blog
    一、前言总结三次题目集的知识点、题量、难度等情况第六次题目集开始了新的迭代系统,万恶的点菜系统终于结束了,取而代之的是课程成绩统计程序,虽说更换了迭代系统但是感觉换汤不换药,很多要用到的知识点和内容和菜单非常类似,甚至是比点菜系统要简单很多(听说是不让平时分那么难看),万......