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

桂林旅游几月份去最好seo自媒体培训

桂林旅游几月份去最好,seo自媒体培训,wordpress主题vue,定制网络营销计划JWT 什么是 JWT JSON Web Token,通过数字签名的方式,以 JSON 对象为载体,在不同的服务终端之间安全地传输信息 官网:https://jwt.io/SDK: https://jwt.io/libraries (含Java和各种语言)Java SDK(上面的SDK链接得到): https://g…

JWT

什么是 JWT

JSON Web Token,通过数字签名的方式,以 JSON 对象为载体,在不同的服务终端之间安全地传输信息

  • 官网:https://jwt.io/
  • SDK: https://jwt.io/libraries (含Java和各种语言)
  • Java SDK(上面的SDK链接得到): https://github.com/auth0/java-jwt (java sdk也有很多种,这是其中一种)
  • 可以根据自己的喜好选择 SDK,不同的SDK的API设计有差异,那自然会有好坏
  • 本项目种使用的 SDK 也是官方推荐的其中一种(选官方的比来路不明的好)

JWT 有什么用?

JWT 最常见的场景就是授权认证,一旦用户登录,后续每个请求都将包含JWT,系统在每次处理用户请求之前,都要先进行 JWT 安全校验,通过之后再进行处理。

JWT 的组成

JWT 由 3 部分组成,用 . 拼接

格式是 Header.Payload.Signature

  • Header(头信息)
{'typ': 'JWT','alg': 'HS256'
}

包含类型typ和算法alg,类型写死 JWT,算法可以自己决定,这里用HS256举例

  • Payload
实际的有效数据,你要传的业务数据,例如:
  • Signature
Signature是这么算出来的?var encodedString = base64UrlEncode(header) + '.' + base64UrlEncode(payload);
var signature = HMACSHA256(encodedString, 'your_secret');说明:
1、header和payload先用base64加密用点链接起来,再用header里alg所指定的算法计算摘要
2、your_secret 就是秘钥,加密方和解密方共同知道的,解密的时候要用

补充

当你拿到一段jwt字符串的时候(就是三段式的那串),你能知道什么?

对于 xxx.yyy.zzz,你可以知道

  • xxx,可以用base64解密xxx
  • yyy,本以为base64不能解密,结果可以,另外,我也遇到过不能解密的,可能是自己额外加密了
  • zzz,不能base64解密

注意:不要整段粘贴进去用base64解密,要分段,否则可能会出现解密不了的情况。

例子

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0ZWFjaGVyIjp7Im5hbWUiOiJNaXNzIExlZSJ9LCJzZXgiOnRydWUsIm5hbWUiOiJTdG9uZSIsImNvdXJzZUxpc3QiOlt7Im5hbWUiOiJNYXRoIiwiY3JlZGl0cyI6NH0seyJuYW1lIjoiRW5nbGlzaCIsImNyZWRpdHMiOjN9XSwiZXhwIjoxNjkxNDExMzcyLCJhZ2UiOjIwfQ.C2LJfyeeS2E0tpS12o-MnQWvn3B7ecK_ul3kudpiAPE注意一定要分段粘贴进去进行base64解密,不要一整个整体,本例子没有问题,有些别的例子会出现yyy部分不能解密的情况!!!base64解密第一段:{"typ":"JWT","alg":"HS256"}
base64解密第一段:{"teacher":{"name":"Miss Lee"},"sex":true,"name":"Stone","courseList":[{"name":"Math","credits":4},{"name":"English","credits":3}],"exp":1691411372,"age":20}
base64解密第一段:(乱码,看来是解密不了)

Java 例子

其实实际的使用过程,Java 作为后端仅仅需要写解析jwt的,对于封装,这是前端要干的事情。

package com.wyf.test.jwt;import io.jsonwebtoken.*;import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.*;public class JWTTest {private static final String MY_SECRET = "xAy23hz23YK";// 加解密用的秘钥public static void main(String[] args) throws InterruptedException {String jwtString = testGetJwtString();//Thread.sleep(4*1000);// 模拟超市的情况是否能检查出来System.out.println("\n-------------------\n");testParseJwtString(jwtString);}// 得到加密的字符串,这个一般来说不是Java写的,肯定是前端人员写的,JS(react/vue等)public static String testGetJwtString() {/*格式:Header.Payload.Signatureheader的格式是:{'typ': 'JWT','alg': 'HS256'}其中类型typ写死,alg可选,这里选HS256算法Payload 是实际的数据Signature的计算方式如下(参考如下用JS写的伪代码):var encodedString = base64UrlEncode(header) + '.' + base64UrlEncode(payload);var signature = HMACSHA256(encodedString, 'your_secret');其中 your_secret 就是秘钥,加密方和解密方共同知道的,解密的时候要用*/// 设置 token 有效期long tokenLifespan = 3 * 1000; // 30 秒Date expireDateTime = new Date(System.currentTimeMillis() + tokenLifespan);// 用 Java 中引入的 JWT 包里的 APIJwtBuilder jwtBuilder = Jwts.builder();String jwtString = jwtBuilder// header.setHeaderParam("typ", "JWT").setHeaderParam("alg", "HS256")// payload (claim 其实就是payload的意思,就是你要传的数据).setClaims(prepareMapPayloadData())// 可选,设置 token 有效期.setExpiration(expireDateTime)// signature (解密的时候用的secret不对的话会抛出signature无法匹配的异常:io.jsonwebtoken.SignatureException: JWT signature does not match locally computed signature.).signWith(SignatureAlgorithm.HS256, MY_SECRET)// 用点连接起来.compact();System.out.println("jwtString:" + jwtString);System.out.println("token duration(Sec):" + (tokenLifespan / 1000));SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ");simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+8"));System.out.println("expireDateTime:" + simpleDateFormat.format(expireDateTime));return jwtString;}// 我在想这个方法根本就不需要返回payload里的值,如果使用JWT,仅仅是validate一下signature是不是正确的、达到鉴权效果就可以了public static Object testParseJwtString(String jwtString) {JwtParser jwtParser = Jwts.parser();// 设置解密用的秘钥(解密的时候用的secret不对的话会抛出signature无法匹配的异常)jwtParser.setSigningKey(MY_SECRET);// parse 的时候就会校验签名,不正确的时候会从这行抛出异常,也会校验token是否超时!如果超时爆出// Exception in thread "main" io.jsonwebtoken.ExpiredJwtException: JWT expired at 2023-08-07T18:59:42Z. Current time: 2023-08-07T18:59:44Z, a difference of 2416 milliseconds.  Allowed clock skew: 0 milliseconds.Jwt parse = jwtParser.parse(jwtString);Header header = parse.getHeader();Object body = parse.getBody();// 其API是设计成用Object接收的System.out.println("header: " + (header != null ? header.getClass().toString() + ", " + header : "null"));System.out.println("body: " + (body != null ? body.getClass().toString() + ", " + body : "null"));return body;}/*** method to convert object to a map* @param obj* @return* @throws IllegalAccessException*/public static Map<String, Object> getObjectToMap(Object obj) throws IllegalAccessException {Map<String, Object> map = new HashMap<String, Object>();Class<?> cla = obj.getClass();Field[] fields = cla.getDeclaredFields();for (Field field : fields) {field.setAccessible(true);String keyName = field.getName();Object value = field.get(obj);if (value == null)value = "";map.put(keyName, value);}return map;}public static Map<String, Object> prepareMapPayloadData() {Map<String, Object> objectToMap;try {objectToMap = getObjectToMap(preparePayloadData());} catch (IllegalAccessException e) {throw new RuntimeException(e);}System.out.println("payload map: " + objectToMap);return objectToMap;}public static Student preparePayloadData() {List<Course> courseList = new ArrayList<Course>();Course course1 = new Course();course1.setName("Math");course1.setCredits(4);Course course2 = new Course();course2.setName("English");course2.setCredits(3);courseList.add(course1);courseList.add(course2);Teacher teacher = new Teacher();teacher.setName("Miss Lee");Student student = new Student();student.setName("Stone");student.setAge(20);student.setSex(true);student.setTeacher(teacher);student.setCourseList(courseList);return student;}public static class Student {private String name;private Integer age;private Boolean sex;private Teacher teacher;private List<Course> courseList;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Boolean getSex() {return sex;}public void setSex(Boolean sex) {this.sex = sex;}public Teacher getTeacher() {return teacher;}public void setTeacher(Teacher teacher) {this.teacher = teacher;}public List<Course> getCourseList() {return courseList;}public void setCourseList(List<Course> courseList) {this.courseList = courseList;}}public static class Teacher {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}}public static class Course {private String name;private Integer credits;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getCredits() {return credits;}public void setCredits(Integer credits) {this.credits = credits;}}
}
http://www.tj-hxxt.cn/news/45796.html

相关文章:

  • 网站刷单账务处理怎么做电商网
  • 济南做公司网站网络策划营销
  • 湖南seo推广软件恩施seo整站优化哪家好
  • 一步步教你做电商网站中国万网域名注册官网
  • 怎么做室内设计公司网站给我免费播放片高清在线观看
  • 可以做动画的网站深圳seo外包
  • 免费建设游戏对战平台网站口碑营销5t
  • 沈阳网站公司哪个好杭州seo技术
  • 做网站秒杀软件用什么语言好平台外宣推广技巧
  • 曲阜网站建设哪家便宜企业网站模板
  • 网站建设选青岛的公司好不好免费html网页模板
  • 做平面设计的网站广东清远今天疫情实时动态防控
  • 淘宝联盟网站怎么做360免费建站
  • sns社交网站建设好项目推荐平台
  • seo的优缺点长沙seo霜天
  • 个人做旅游网站的意义销售管理系统
  • 交流平台网站怎么做不了自媒体视频剪辑培训班
  • 网站首页怎么制作过程营销型网站建设实训总结
  • wordpress字不能显示图片太原网站制作优化seo公司
  • 苏州在线网站制作网络营销推广方案3篇
  • 网站下面的公安备案怎么做aso关键词排名优化是什么
  • 农业信息中心网站建设自己建网站怎么弄
  • 网页设计需要学什么kseo新方法
  • 国外黄色 网站百度网页版下载安装
  • 网站名称格式电子商务推广方式
  • 网站建设美化谷歌搜索引擎
  • 青岛网站设计软件网站关键词优化怎么弄
  • 网站建设风险管理计划seo主要做哪些工作
  • 刷数据网站怎么推广免费的郑州网络推广服务
  • 翠竹林wordpress主题windows系统优化软件排行榜