springboot2.0 + jwt 生成token

Spring Boot整合JWT实现

1、写在前面
什么是JWT

JWT(Json Web Token),是一种工具,格式为XXXX.XXXX.XXXX的字符串,JWT以一种安全的方式在用户和服务器之间 传递存放在JWT中的不敏感信息。https://jwt.io/ 可以解析你的生成字符串(token)

jwt是怎么组成
https://juejin.im/post/5bbff9f7e51d450e8b1404c4 人家写的超级棒,可以去看看! 估计很多同学和我 一样只想代码实现,至于原理也只会慢慢来理解,所以废话不多说!

2、代码
引用:

  <!--jwt-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>
        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>3.4.0</version>
        </dependency>

        <!--阿里 FastJson依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.44</version>
        </dependency>

2、JwtUtils

	import com.alibaba.fastjson.JSON;
	import com.alibaba.fastjson.JSONArray;
	import com.alibaba.fastjson.JSONObject;
	import com.google.api.client.json.Json;
	import io.jsonwebtoken.*;
	
	import javax.servlet.ServletException;
	import java.util.*;


   final static String base64EncodedSecretKey = "base64EncodedSecretKey";//私钥final

    public static String getToken(String userName, long TOKEN_EXP) {
        if (TOKEN_EXP == 0) {
            TOKEN_EXP = 1000 * 60 * 60;
        }
        return Jwts.builder()
                .setSubject(userName)
                .claim("username", userName)
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + TOKEN_EXP)) /*过期时间*/
                .signWith(SignatureAlgorithm.HS256, base64EncodedSecretKey)
                .compact();
    }

    public static String getTokenByMap(Map<String, Object> var1, Date expDate) {
        return Jwts.builder()
                .setClaims(var1)
                .setIssuedAt(new Date())
                .setExpiration(expDate) /*过期时间*/
                .signWith(SignatureAlgorithm.HS256, base64EncodedSecretKey)
                .compact();
    }


    //解析token
    public static JSONObject checkToken(String token) throws ServletException {
        boolean success = false;
        Claims claims = null;
        String msg = null;
        try {
           // claims  可以得到你额外得到的值
            claims = Jwts.parser().setSigningKey(base64EncodedSecretKey).parseClaimsJws(token).getBody();
        } catch (ExpiredJwtException e1) {
            msg = "token已经过期";
            e1.printStackTrace();
        } catch (Exception e) {
            msg = "无效token";
            e.printStackTrace();
        }

        Map<String, Object> reusltMap = new HashMap<>();
        if (claims != null) {
            success = true;
            msg = "解析成功";
        }
        reusltMap.put("success", success);
        reusltMap.put("msg", msg);
        reusltMap.put("data", claims);
        return JSONObject.parseObject(JSON.toJSONString(reusltMap));
    }

3、代码完毕!

总结:
怎么使用就要看你具体的业务,你可以随便改成数据形式,看你怎么方便! 怎么调用????好好学习,天天向上!

    getToken("hahah", 30);
   
    Map<String, Object> map = new HashMap<>();
    map.put("userid", 1);
   
    getTokenByMap(map, new Date());
  
    try {
        checkToken(getTokenByMap(map, new Date()));
    } catch (ServletException e) {
        e.printStackTrace();
    }
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行人已

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值