发表于: 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类型数据
收获:
评论