jwt对称加密测试

本文介绍了JWT在提升用户登录状态管理和数据加密中的应用,通过示例展示了如何使用JWT生成、存储和验证,以及它与传统Cookie和Session的区别。
摘要由CSDN通过智能技术生成

使用JWT就是对cookie和session的升级

即记录用户登录状态的任务交给了token。

  @Test
    public void Test1() throws InterruptedException {
        JwtBuilder builder = Jwts.builder();
        builder.setId("李兆");
        builder.setSubject("给别人传递的消息");     //包装传输者信息
        builder.setIssuer("发送者作者");     //设置发送者信息
        builder.setExpiration(new Date(System.currentTimeMillis() + 1000 * 6));//设置过期时间,y一旦到了过期时间则无法使用。
        builder.setIssuedAt(new Date());
//    添加自定义数据
        Map<String, Object> map = new HashMap<>();
        map.put("你好", "我试试吧");
//        builder.setClaims(map);    //封装自定义信息
//        builder.addClaims(map);   //使用add会返回所有数据,而使用set值返回map数据

        //将密钥进行加密
        byte[] encode = Base64.getEncoder().encode("admin".getBytes());
        builder.signWith(SignatureAlgorithm.HS256, encode);//设置加密方法以及加密密码
        String compact = builder.compact();//令牌创建完毕

//        wait(6000);//设置时间间隔,致使过期

        Claims body = Jwts.parser().setSigningKey(encode).parseClaimsJws(compact).getBody();
        System.out.println(body);
    }

网关是对于url的加密,而jwt是对于传输数据的加密

一般创建一个JwtUtil工具类,将map内容存放进去。生成一个string字符串。待使用时在解析。

public class JwtUtil {

    //指定令牌密钥
    private  static  final String TOKEN_SRECT = "xinchi";

    //指定令牌的存活时间 2个小时
    private  static final Long  EXTIME = 1000 * 60 * 60 * 2L;

    //生成令牌
    public static String  createToken(String id,Map<String,Object> map){
        JwtBuilder jwtBuilder = Jwts.builder();
        return  jwtBuilder.setId(id) //令牌标识id
                .setIssuer("lz") //令牌的发布者
                .setSubject(JSON.toJSONString(map)) //令牌基本内容
                .setIssuedAt(new java.util.Date()) //发放时间
                .setExpiration(new java.util.Date(System.currentTimeMillis()+EXTIME)) //过期时间
                //.addClaims(map) //扩展信息
                .signWith(SignatureAlgorithm.HS256, Base64.getDecoder().decode(TOKEN_SRECT))
                .compact();//生成令牌
    }

    //解析令牌
    public  static Claims parseToken(String token){
        Jws<Claims> claimsJws = Jwts.parser().setSigningKey(Base64.getDecoder().decode(TOKEN_SRECT)).parseClaimsJws(token);
        return  claimsJws.getBody();
    }

}

就像一个加密通话。

还有一种就是token只用作检验是否登录。只当作一个“门禁卡”。有了就可以后续操作了。

额外

        System.out.println(request.getCookies());   //cookies值
        System.out.println(request.getId());    //获取会话id
        System.out.println(request.getQueryParams());  //?后接键值对
        System.out.println(request.getLocalAddress()); ///127.0.0.1:8080
        System.out.println(request.getPath()); ///api/logout

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值