jwt 及springboot实现

1 篇文章 0 订阅
1 篇文章 0 订阅

什么是JWT

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

JWT作用

JWT最常见的场景是授权登录,一旦用户登录,后续每个请求都将包含JWT,系统在每次处理用户请求之前,都会先进行JWT安全验证,通过之后再进行处理,例如公司进出时的工牌

JWT的组成

JWT总共由三部分组成,并用.拼接

例如

sakakhvhhjasvx5as6xsaxxs51a6.xasyjxsvaxsa6545sx6asxbahvxshsx1a+saxsxnsxhsaxsx5sa64asxsahxyusaxvsaxxsa994xas9xsaa.xsakyasxxsatxyaafxyaas19x9asxudassx

这三部分分别是:

● Header

{
    'typ': 'JWT'
    'alg': 'HS256'
}

● Payload载荷,重复有效信息

{
    'sub': '1356585'
    'name': "asxkbkhxas"
}

● Signature签名

var encodedString = base64UrlEncode(header)+'.'+base64UrlEncode(payload);
var signature = HMACSHA256(encodeString, 'secret')

使用方法

首先引入依赖

jdk1.8

        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.0</version>
        </dependency>

如果是jdk1.8版本以上

还需要加入jaxb-impl,jaxb-core,jaxb-api依赖

加密

        JwtBuilder builder = Jwts.builder();
        String jwtToken  = builder
                //header
                .setHeaderParam("typ","Jwt")
                .setHeaderParam("alg","HS256")
                //patLoad
                .claim("username","tom")
                .claim("role","admain")
                .setSubject("admin-test")//主题
                .setExpiration(new Date(System.currentTimeMillis()+200000))//设置有效期要放在一个Data构造器中,并获得系统当前时间并加上持续的时间
                .setId(UUID.randomUUID().toString())
                //signature
                .signWith(SignatureAlgorithm.HS256,"xsaasx")//设置签名
                //将这三部分用.拼接起来
                .compact();
​
        System.out.println(jwtToken);

解密

        JwtParser parser = Jwts.parser();
        Jws<Claims> xsaasx = parser.setSigningKey("xsaasx").parseClaimsJws(token);//解密中的setSigningKey参数必须和加密中设置的签名一致
        Claims body = xsaasx.getBody();
        System.out.println(body.get("username"));
        System.out.println(body.get("role"));

总代码

import io.jsonwebtoken.*;
​
import java.util.Date;
import java.util.UUID;

public class test {
    public static String addJwt(){
        JwtBuilder builder = Jwts.builder();
        String jwtToken  = builder
                //header
                .setHeaderParam("typ","Jwt")
                .setHeaderParam("alg","HS256")
                //patLoad
                .claim("username","tom")
                .claim("role","admain")
                .setSubject("admin-test")//主题
                .setExpiration(new Date(System.currentTimeMillis()+200000))//设置有效期要放在一个Data构造器中,并获得系统当前时间并加上持续的时间
                .setId(UUID.randomUUID().toString())
                //signature
                .signWith(SignatureAlgorithm.HS256,"xsaasx")//设置签名
                //将这三部分用.拼接起来
                .compact();
​
        System.out.println(jwtToken);
        return jwtToken;
    }
    public static void closeJwt(String token){
        JwtParser parser = Jwts.parser();
        Jws<Claims> xsaasx = parser.setSigningKey("xsaasx").parseClaimsJws(token);
        Claims body = xsaasx.getBody();
        System.out.println(body.get("username"));
        System.out.println(body.get("role"));
    }
​
    public static void main(String[] args) {
        closeJwt(addJwt());
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值