发表于: 2019-11-05 22:31:45

1 1002


今天完成的事情:

1.使用fmt标签来进行时间的转换

1.1引入头文件:

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

1.2 使用fmt标签 value是时间值,pattern是输出模式

<fmt:formatDate value="${item.testDate}" pattern="yyyy-MM-dd"/>

1.3使用效果


2.什么是jwt

jwt是json web token的缩写

一个JWT实际上就是一个字符串,它由三部分组成,头部载荷签名

2.1载荷(Payload)

一个json对象

{
   "iss": "John Wu JWT",
   "iat": 1441593502,
   "exp": 1441594722,
   "aud": "www.example.com",
   "sub": "jrocket@example.com",
   "from_user": "B",
   "target_user": "A"
}

这里面的前五个字段都是由JWT的标准所定义的。

  • iss: 该JWT的签发者
  • sub: 该JWT所面向的用户
  • aud: 接收该JWT的一方
  • exp(expires): 什么时候过期,这里是一个Unix时间戳
  • iat(issued at): 在什么时候签发的
  • 将上面的JSON对象进行[base64编码]可以得到下面的字符串。这个字符串我们将它称作JWT的Payload(载荷)
  • 这里进行base64只是一种编码过程,并不涉及加密过程,因此此处可以被解码成原始json状态,
  • eyJmcm9tX3VzZXIiOiJC


2.2头部(Header)

JWT还需要一个头部,头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。这也可以被表示成一个JSON对象。

{
 "typ": "JWT",
 "alg": "HS256"
}

在这里,我们说明了这是一个JWT,并且我们所用的签名算法(后面会提到)是HS256算法。

对它也要进行Base64编码,之后的字符串就成了JWT的Header(头部)

KV1QiLCJhbGciOiJIUzI1NiJ9
2.3签名(签名)

将上面的两个编码后的字符串都用句号.连接在一起(头部在前),就形成了

KV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJC

最后,我们将上面拼接完的字符串用HS256算法进行加密。在加密的时候,我们还需要提供一个密钥(secret)。如果我们用mystar作为密钥的话,那么就可以得到我们加密后的内容

amyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM

这一部分又叫做签名

完整的token

KV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJC.rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKVi


最终jwt的形式是  xxxx.yyyy.zzzz 三段

2.4签名的目的

最后一步签名的过程,实际上是对头部以及载荷内容进行签名。一般而言,加密算法对于不同的输入产生的输出总是不一样的。对于两个不同的输入,产生同样的输出的概率极其地小(有可能比我成世界首富的概率还小)。所以,我们就把“不一样的输入产生不一样的输出”当做必然事件来看待吧。

所以,如果有人对头部以及载荷的内容解码之后进行修改,再进行编码的话,那么新的头部和载荷的签名和之前的签名就将是不一样的。而且,如果不知道服务器加密的时候用的密钥的话,得出来的签名也一定会是不一样的。

及服务器收到token对header和payload进行加密后如果和token上的签名不一致的话,则说明此token被人动过,拒不接受

但是token中所包含的信息是会被暴露出去的,因为base64是一种编码方式,而不是加密算法,所以第三方拿到token是可以看见token中的存放的数据的,所以我们在使用token时不应该将敏感信息放置当中,如密码等,可以存放一些用户id这种非敏感的用户信息



明天计划的事情:(一定要写非常细致的内容) 
遇到的问题:

1.使用fmt标签时一开始使用的createAt字段进行转换,但是有由于createAt存储的是int类型,不能直接用于fmt转换,需要使用Date类型数据

 


收获:


返回列表 返回列表
评论

    分享到