springboot实现jwt令牌的会话技术

第一部分:JWT令牌含义

(1)全称

json web token(也就是json格式)

(2)组成

由三部分组成:
①header头

记录令牌的类型(我们这个就是JWT类型),以及签名算法(比如sha256)。

②Payload有效载荷

携带一些和自身数据有关的特征加入进去,比如用户id,name;

③Signature数字签名

加入指定的秘钥(融合前两部分的内容)

第二部分:配置

(1)导包pom文件

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

(2)编写测试代码

①生成jwt

   @Test
    void generateJWT() {
        Map<String,Object>claims=new HashMap<String,Object>();
        claims.put("id",1);
        claims.put("name","zjc");
        String jwt= Jwts.builder()
                .signWith(SignatureAlgorithm.HS256,"zjc123456")//签名算法和秘钥
                .setClaims(claims)//自定义内容(载荷)
                .setExpiration(new Date(System.currentTimeMillis()+3600*1000))//以毫秒为单位,现在算的是1小时后失效
                .compact();
        System.out.println(jwt);

    }

运行效果:

内容为:eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiempjIiwiaWQiOjEsImV4cCI6MTcyMzM4ODc1M30.9MnUMD05NuVCiO3Ycxcyb7WgExpcrgJeGXySt6PvdoI

可以看到由三部分组成!

②解析jwt

    @Test
    void ParseJWT(){
        Claims claims=Jwts.parser()
                .setSigningKey("zjc123456")
                .parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiempjIiwiaWQiOjEsImV4cCI6MTcyMzM4ODc1M30.9MnUMD05NuVCiO3Ycxcyb7WgExpcrgJeGXySt6PvdoI")
                .getBody();
        System.out.println(claims);
    }

运行效果为:

后面的exp是令牌的过期时间。

第三部分:JWT令牌整合springboot的登录操作

要求:登录完成之后要把这个jwt令牌封装到R对象里面的data内容里面给前端页面,,以后浏览器对服务器的每一次访问都要携带这个jwt。

在controller层下面的utils工具包里面新建一个jwtUtils.java的文件,设置:

①登录密码为"zjc123456";

②生存时间为“43200000L”也就是12小时。

③使用的加密算法是sha256

代码为:

public class jwtUtils {
    private static SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
    private static String secretKey = "zjc123456";
    private static Long expiration = 43200000L;

    public static String generateJWT( Map<String,Object> claims) {
        String jwt= Jwts.builder()
                .signWith(signatureAlgorithm,secretKey)//签名算法和秘钥
                .setClaims(claims)//自定义内容(载荷)
                .setExpiration(new Date(System.currentTimeMillis()+expiration))//以毫秒为单位,现在算的是1小时后失效
                .compact();
        System.out.println(jwt);
        return jwt;
    }

    public static Claims ParseJWT(String jwt){
        Claims claims=Jwts.parser()
                .setSigningKey(secretKey)
                .parseClaimsJws(jwt)
                .getBody();
        System.out.println(claims);
        return claims;
    }
}

登录页面的内容:

//生成jwt令牌
            Map<String,Object> claims=new HashMap<String,Object>();
            claims.put("username",user1.getUsername());
            claims.put("passward",user.getPassword());
            String jwt=jwtUtils.generateJWT(claims);
            r.setData(jwt);

 源代码获取:

①数据库

通过百度网盘分享的文件:燃煤热电数据库3.zip
链接:https://pan.baidu.com/s/1Usl7Mnd-NrT5NEp9nFHNDQ?pwd=xy6g 
提取码:xy6g 
--来自百度网盘超级会员V5的分享

②代码文件

通过百度网盘分享的文件:springboot整合jwt令牌(会话技术).zip
链接:https://pan.baidu.com/s/1E_InehuWnVYkOUYuK4zNLw?pwd=j2uc 
提取码:j2uc 
--来自百度网盘超级会员V5的分享

 运行我打包的项目,为了能够正常运行(需要兼容maven以及java版本),具体的调整方法看我博客:http://t.csdnimg.cn/Uovig

好啦,希望能够帮助到大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

还不秃顶的计科生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值