前言:
header(头部),头部信息主要包括(参数的类型–JWT,签名的算法–HS256)
poyload(负荷),负荷基本就是自己想要存放的信息(
因为信息会暴露,不应该在载荷里面加入任何敏感的数据),有两个形式,下边会讲到
sign(签名),签名的作用就是为了防止恶意篡改数据,下边会详细说明
自己生成token:
Base64是一种编码,也就是说,它是可以被翻译回原来的样子来的。它并不是一种加密过程)。然后再创建负荷的json,然后也同样用base64编码,这样就生成了两个字符串,然后用.拼接到一起就形成了现在的形式:
eyJ
0
eXAiOiJKV
1
QiLCJhbGciOiJIUzI
1
NiJ9
.eyJmc
m9
tX
3
VzZXIiOiJCIiwidGFyZ
2
V
0
X
3
VzZXIiOiJBI
n0。在这里只是给大家一个演示,
因为没有借助第三方的jar,
import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; public class HS256 { public static String returnSign(String message) { String hash = ""; //别人篡改数据,但是签名的密匙是在服务器存储,密匙不同,生成的sign也不同。 //所以根据sign的不 同就可以知道是否篡改了数据。 String secret = "mystar";//密匙 try { Mac sha256_HMAC = Mac.getInstance("HmacSHA256"); SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(),"HmacSHA256"); sha256_HMAC.init(secret_key); hash = Base64.encodeBase64String(sha256_HMAC.doFinal(message.getBytes())); System.out.println(message+""+hash); } catch (Exception e) { System.out.println("Error"+e); } return hash; } }
用cookie存储就可以在同一客
户端调用了。
借用第三方的jar(jjwt-0.7.0.jar)生成token:
在这里自己已经通过代码测试,直接先看代码:

base64的编码,你看过源码就知道它用的是哪一种,用的是自己jar包自带的(
io.jsonwebtoken.impl.Base64Codec),跟自己生成token时,用的base64的jar不一样,自己在此列出来:
public static void main(String[] args) { String token = createJWT("11","22","222",11); System.out.println(token); JSONObject json_header = new JSONObject(); json_header.put("typ", "JWT");//类型 json_header.put("alg", "HS256");//加密算法 String header=org.apache.axis.encoding.Base64. encode(json_header.toString().getBytes()); String header = Base64Codec.BASE64URL.encode(json_header.toString() .getBytes()); String aa = Base64Codec.BASE64URL.decodeToString(header); System.out.println(header + "--" + aa); }
假如外界会篡改参数,他肯定也知道构成,会把负荷里边的参数取出来,也许会修改,然后编码放回去,但是头部的信息对他来说用处不大,所以自己在这个方法里边,默认把头部加上,负荷的值还是自己在调用的时候传入进来。这样执行完,把生成的token就当做参数传到前台,存储在cookie里边。

http://www.cnblogs.com/anny0404/p/5318692.html
http://blog.leapoahead.com/2015/09/06/understanding-jwt/
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232726.html原文链接:https://javaforall.net