如何使用JJWT及JWT讲解和工具类

yizhihongxing

关于“如何使用JJWT及JWT讲解和工具类”的完整攻略,我这里为大家详细讲解。

什么是JWT

JWT是JSON Web Token的缩写,是一种轻量级的身份认证和授权机制。它允许跨域安全地传递信息,该信息可以被验证和信任,因为它是数字签名的。JWT通常用于Web应用程序的身份验证和授权,以及用户管理。

一个JWT由三个部分组成:头部(Header)、载荷(Payload)和签名(Signature)。其中头部描述该JWT的元数据,载荷描述所传输信息的数据,签名则保证了头部和载荷的完整性和真实性。

JWT的优点

  • 无需在服务端存储session信息,更好的水平扩展
  • 跨语言、跨平台互操作性好
  • 轻量、高效

如何使用JJWT

JJWT是Java JWT的缩写,是一个简单易用的Java JWT实现库。它提供简单的API,支持JWT的生成和验证。

Maven依赖

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

生成JWT

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import java.security.Key;

Key key = Keys.secretKeyFor(SignatureAlgorithm.HS256);
String jws = Jwts.builder().setSubject("xueyou").signWith(key).compact();
System.out.println(jws);

解析JWT

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;

String jws = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ4dWV5b3UiLCJleHAiOjE2MjQ3OTcwMDAsImlhdCI6MTYyNDczMTAwMH0.4BZWU_92M1q33AkYOT6a1wxjEkXEKf1GKGlWl7_trSo";

Claims claims = Jwts.parser()
   .setSigningKey("secret")
   .parseClaimsJws(jws)
   .getBody();
System.out.println("Subject: " + claims.getSubject());
System.out.println("Expiration: " + claims.getExpiration());

JWT的工具类

除了使用JJwt生成和解析JWT之外,还可以通过封装工具类的方式来更方便的处理JWT。

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import java.nio.charset.StandardCharsets;
import java.security.Key;
import java.util.Date;

public class JwtUtils {

    private static final byte[] SECRET_BYTES = "secret".getBytes(StandardCharsets.UTF_8);

    private static Key jwtKey = Keys.hmacShaKeyFor(SECRET_BYTES);

    public static String createToken(String subject) {
        Date now = new Date();
        Date exp = new Date(now.getTime() + 3600 * 1000L); // 有效期为1小时
        return Jwts.builder()
            .setIssuer("Example")
            .setSubject(subject)
            .setIssuedAt(now)
            .setExpiration(exp)
            .signWith(jwtKey, SignatureAlgorithm.HS256)
            .compact();
    }

    public static Jws<Claims> parseToken(String token) {
        return Jwts.parserBuilder()
            .setSigningKey(jwtKey)
            .build()
            .parseClaimsJws(token);
    }

}

上述代码中,JwtUtils类提供了两个静态方法:createToken用于创建JWT,parseToken用于解析JWT。

其中,createToken使用Jwts.builder()来配置JWT的Header和Payload,使用signWith方法进行签名,最后通过compact()方法生成JWT。

而parseToken则使用Jwts.parserBuilder()进行解析签名和校验有效期等信息。该方法的返回值是Jws,其中Claims表示JWT的Payload。

示例说明

示例一:使用JJwt生成和解析JWT

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import java.security.Key;
import java.util.Date;

public class JjwtExample {

    public static void main(String[] args) {
        Key key = Keys.secretKeyFor(SignatureAlgorithm.HS256);

        String jws = Jwts.builder()
            .setSubject("user")
            .setExpiration(new Date(System.currentTimeMillis() + 86400))
            .signWith(key)
            .compact();

        Claims claims = Jwts.parser()
            .setSigningKey(key)
            .parseClaimsJws(jws)
            .getBody();

        System.out.println("Subject: " + claims.getSubject());
        System.out.println("Expiration: " + claims.getExpiration());
    }

}

在上述代码中,使用Jjwt生成JWT,并使用parseClaimsJws方法进行解析。

示例二:使用工具类生成和解析JWT

public class JwtUtilsExample {

    public static void main(String[] args) {
        String token = JwtUtils.createToken("user");
        System.out.println(token);

        Jws<Claims> jws = JwtUtils.parseToken(token);
        System.out.println("Subject: " + jws.getBody().getSubject());
        System.out.println("Expiration: " + jws.getBody().getExpiration());
    }

}

在上述代码中,使用JwtUtils工具类生成和解析JWT。

以上是“如何使用JJWT及JWT讲解和工具类”的完整攻略,希望能对你有所帮助。如果有任何问题可以继续提问。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何使用JJWT及JWT讲解和工具类 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 详解SpringMVC @RequestBody接收Json对象字符串

    下面是详解SpringMVC @RequestBody接收Json对象字符串的完整攻略: 一、什么是SpringMVC @RequestBody 在SpringMVC中,@RequestBody注解用于指示方法参数应该来自HTTP请求体。当请求被解析时,映射器将请求体中的JSON字符串转换为指定的Java类型的数据。 二、@RequestBody的使用方法 …

    Java 2023年5月26日
    00
  • Eolink上传文件到Java后台进行处理的示例代码

    下面我将详细讲解“Eolink上传文件到Java后台进行处理的示例代码”的完整攻略,包括代码示例和说明。 环境准备 首先,需要安装好JDK和Maven。具体的安装步骤可以自行查看相关的教程。 接着,需要新建一个Maven项目,并添加相关的依赖。在pom.xml文件中,添加以下依赖: <dependencies> <dependency&gt…

    Java 2023年6月1日
    00
  • Springboot项目平滑关闭及自动化关闭脚本

    下面是详细讲解“Spring Boot 项目平滑关闭及自动化关闭脚本”的完整攻略: 什么是 Spring Boot 项目平滑关闭? Spring Boot 项目平滑关闭是指在关闭 Spring Boot 项目时会先等待当前请求处理完成再关闭应用程序。这样可以保证处理请求的过程不被中断。 如何实现 Spring Boot 项目平滑关闭? 使用 actuator…

    Java 2023年5月20日
    00
  • Java:String.split()特殊字符处理操作

    Java中的String类提供了split()方法,用于将一个字符串按照指定的分隔符拆分成多个子字符串。在使用split()方法时,可以使用正则表达式作为分隔符,对有些特殊字符需要进行特殊处理,本文将讲解如何处理这些特殊字符的方法。 1. 特殊字符处理方法 下面是特殊字符的处理方法,我们需要将这些字符转义,使其能够正确地被split()方法识别。 “.”:表…

    Java 2023年5月27日
    00
  • Mysql字符集和排序规则详解

    Mysql字符集和排序规则详解 MySQL是当前最流行的数据库之一,对于数据存储乃至于展示,字符集和排序规则都是最基本的要素之一。 字符集(Character Set) MySQL中,字符集是一组字符的字符集合集合,也就是说,字符集是相互关联的一组字符,这些字符在计算机中用一定的方式进行存储和传输。MySQL中实现了多种字符集,具体可以在官方文档中查看。 在…

    Java 2023年6月1日
    00
  • Java查询时间段(startTime–endTime)间的数据方式

    针对Java查询时间段(startTime–endTime)间的数据方式,我提供以下完整攻略。 1. 时间格式 首先需要明确Java程序所使用的时间格式,常见的有”yyyy-MM-dd HH:mm:ss”、”yyyyMMddHHmmss”等。假设我们的时间格式为”yyyy-MM-dd HH:mm:ss”。 2. SQL查询语句 接下来就是SQL查询语句,假…

    Java 2023年5月20日
    00
  • 简述Mybatis增删改查实例代码

    下面是详细讲解“简述Mybatis增删改查实例代码”的完整攻略。 1. 简介 Mybatis是一款优秀的持久层框架,它对JDBC的操作进行了封装,使我们能够更加高效地进行数据库操作,同时也提高了代码的可读性和可维护性。在这里,我们将介绍如何使用Mybatis进行增删改查操作。 2. 环境 为了执行Mybatis示例,我们需要安装以下软件: Java JDK …

    Java 2023年5月19日
    00
  • java Spring的启动原理详解

    Java Spring是目前最流行的企业级开发框架之一,它帮助开发人员更加高效地进行项目开发和维护。Spring框架的启动过程比较复杂,本文将介绍Java Spring的启动原理详解及其实现过程。 一、 Spring的启动过程 Spring框架的启动过程大体可以归纳为以下几个步骤: 1. 加载配置文件 Spring框架仅在启动时加载配置文件,这些文件包括XM…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部