Posts Jwt框架详解
Post
Cancel

Jwt框架详解

前言

最近写项目需要用到登录的权限控制。本来想直接上 spring secrity 框架或者 shiro 框架的。 但是项目权限架构还比较简单,个人认为可能没必要弄得复杂。 所以直接将权限控制字段封装到了 token 里。

什么是 Jwt

JSON Web Token,通过数字签名的方式,以 ISON 对象为载体,在不同的服务终端之间安全的传输信息。 JWT 最常见的场景就是授权认证,一旦用户登录,后续每个请求都将包含 JWT,系统在每次处理用户请求的之前,都要先进行 JIWT 安全校验,通过之后再进行处理。

Jwt 的组成部分

  • Header
1
2
3
4
{
  "type": "Jwt", //token类型
  "alg": "HS256" // 机密算法
}
  • Payload 载荷
1
2
3
4
5
{
  "sub": "1234567890",
  "name ": "john ",
  "admin": true
}
  • Signature 签名 对 Header 和 Payload 进行拼接与再次加密。

jwt 加密算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//	加密算法
	@Test
	public void jwt(){
		long time = 1000*60*60*24;
		String signature = "admin";
		JwtBuilder builder = Jwts.builder();
		String token = builder
				// 设置Header
				.setHeaderParam("type","Jwt")
				.setHeaderParam("alg","Hs256")
				// 设置载荷Payload
                    .claim("role",1)
                    // 设置主题
                    .setSubject("jwt-test")
    				//设置过载时间
                    .setExpiration(new Date(System.currentTimeMillis()+time))
    				//设置id
                    .setId(UUID.randomUUID().toString())
				//signature
				.signWith(SignatureAlgorithm.HS256,signature)
				.compact();
		System.out.println(token);
	}

解密算法

1
2
3
4
5
6
7
8
	@Test
	public void parse(){
		String token = "eyJ0eXBlIjoiSnd0IiwiYWxnIjoiSFMyNTYifQ.eyJyb2xlIjoxLCJzdWIiOiJqd3QtdGVzdCIsImV4cCI6MTYyNzQ1OTEwOCwianRpIjoiOWY4MmI0NTUtZDZmZC00OGM3LTkxZTItYzA3OWM3NzdmNjYxIn0.f4FNGap9cTmAtxt11swDtHk6YS9_voeu7jYwTz_OMkw";
		JwtParser jwtParser = Jwts.parser();
		Jws<Claims> claimsJes = jwtParser.setSigningKey("admin").parseClaimsJws(token);
		Claims body = claimsJes.getBody();
		System.out.println(body.get("role"));
	}
This post is licensed under CC BY 4.0 by the author.

Contents

Trending Tags