Java Token登录验证 使用jjwt生成和解析JWT

本文介绍了使用Java的jjwt库进行JWT(JSON Web Tokens)的生成和解析,详细阐述了登录验证的流程,包括登录成功后在Java后端生成JWT并存储,将其返回给前端保存,以及前端如何在请求时携带JWT进行身份验证。同时,提供了后端的JwtUtil工具类、LoginServlet登录处理和JwtFilter过滤器的实例。
摘要由CSDN通过智能技术生成


刚学会了点使用Jwt来验证登录,记录下来

参考

JSON Web Tokens官网 Libraries里有各种语言的推荐包
jjwt的Github网址 JWT官网里面star最多的,所以用了
jjwt官方 生成和解析的例子
前后端分离之JWT用户认证 对JWT有详细的介绍
Java安全验证之JWT实践

依赖

依赖
当时在maven仓库里找到的最新版 网盘
Maven仓库 可以自己找最新的

流程

  1. 登录成功后,在Java中生成Jwt,存入数据库,然后返回给前端;前端接收到Jwt,储存起来(cookie或localStorage)。
  2. 前端调用api时放在Header的Authorization里面,后端通过过滤器Filter判断是否已登录。

没有使用框架,单纯的Html、servlet、数据库

生成和解析Jwt

其实就是官方的 然后用谷歌翻译了一波

生成jwt

//构建JWT的示例方法
private String createJWT(String id, String issuer, String subject, long ttlMillis) {
   
 
    //我们将用于签署令牌的JWT签名算法
    SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
 	//创建时间
    long nowMillis = System.currentTimeMillis();
    Date now = new Date(nowMillis);
 
    //我们将使用我们的Api Key秘密签署您的JWT
    byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(apiKey.getSecret());
    Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());
 
    //让我们设置JWT Claims 
    JwtBuilder builder = Jwts.builder().setId(id)
                                .setIssuedAt(now)
                                .setSubject(subject)
                                .setIssuer(issuer)
                                .signWith(signatureAlgorithm, signingKey);
 	//builder.claim("name", "value"); //设置自定义的信息
 
    //如果已经指定,让我们添加到期日
    //过期时间
    if (ttlMillis >= 0) {
   
    long expMillis = nowMillis + ttlMillis;
        Date exp = new Date(expMillis);
        builder.setExpiration(exp);
    }
 
    //构建JWT并将其序列化为紧凑的URL安全字符串
    return builder.compact();
}

解析Jwt

//验证和读取JWT的示例方法
private void parseJWT(String jwt) {
   
 
    //如果它不是签名的JWS(如预期的那样),则该行将抛出异常
    Claims claims = Jwts.parser()         
       .setSigningKey(DatatypeConverter.parseBase64Binary(apiKey.getSecret()))
       .parseClaimsJws(jwt).getBody();
    System.out.println("ID: " + claims.getId());
    System.out.println("Subject: " + claims.getSubject());
    System.out.println("Issuer: " + claims.getIssuer());
    System.out.println("Expiration: " + claims.getExpiration());
    //claims.get("name") //获取自定义的信息
}

实例

后端

JwtUtil 工具类

package com.util
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值