JwtUtil的内容

这篇博客介绍了如何使用JwtUtil来生成包含用户id、用户名、登录时间等信息的JWT令牌,并设置过期时间和自定义加密属性。还提到了Claims对象用于封装自定义属性,并说明了JWT在多服务环境中的应用,各服务可独立设置过期时间和盐值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为指定内容生成一个jjwt:java json web token
(测试,其实是jwtUtil的内容)

package com.tensequare.jwt;

import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

public class CreateJwt {
    public static void main(String[] args) {
        JwtBuilder jwtBuilder = Jwts.builder()
                .setId("666")
                .setSubject("小马")
                .setIssuedAt(new Date())
                .signWith(SignatureAlgorithm.HS256, "itcast")
                .setExpiration(new Date(new Date().getTime()+60000))
                .claim("role", "admin");
        System.out.println(jwtBuilder.compact());
    }
}

在这里插入图片描述
setId:用户id
setSubject(用户名)
setIssuedAt(登录时间)
signWith(加密方式,盐值);
setExpiration(new Date(new Date().getTime()+60000));
自定义加密的属性(如填加用户角色)
claims是个Map,里面封装了很多的自定义的属性和get,

Jwts.builder().claim(“role”,“admin”).


当解析成功后返回的默认对象就是Claims
解析

package com.tensequare.jwt;

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

import java.text.SimpleDateFormat;

public class ParseJwtTest {
    public static void main(String[] args) {
        Claims claims = Jwts.parser()
                .setSigningKey("itcast")
                .parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2NjYiLCJzdWIiOiLlsI_pqawiLCJpYXQiOjE1Mzc5MzA2MjYsImV4cCI6MTUzNzkzMDY4Niwicm9sZSI6ImFkbWluIn0.IiffIMe0KdMFGfQNJVwOPqUiFHvOBSG_9Hp6pz_iHXs")
                .getBody();
        System.out.println("用户id:"+claims.getId());
        System.out.println("用户名:"+claims.getSubject());
        System.out.println("登录时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(claims.getIssuedAt()));
        System.out.println("过期时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(claims.getExpiration()));
        System.out.println("用户角色:"+claims.get("role"));
    }
}

将jwt相关文件放到common包下,其他服务依赖common包,然后其他在服务的属性中设置过期时间和盐值,各个服务的token过期时间盐值可以不同,其中盐值必须提供
在这里插入图片描述
在这里插入图片描述
jwtUtil是官方下载的
在这里插入图片描述
3)其他服务的resources下添加
在这里插入图片描述


### Java中实现JWT认证和授权 #### 了解JWT及其组成部分 JSON Web Tokens (JWTs) 是一种开放标准(RFC 7519),用于在网络应用环境间传递声明。JWT由三个部分构成:头部(Header)、载荷(Payload)以及签名(Signature)[^1]。 - **头部**通常包含两部分内容:令牌的类型(即JWT)和所使用的哈希算法,如HMAC SHA256或RSA。 - **载荷**包含了实际的数据,也称为声明。声明可以有三种类型:注册声明、公共声明和私有声明。 - **签名**是为了验证消息在此过程中未被更改,并且,在使用密钥签名的情况下,它还可以证明发送者的身份。 #### 添加Maven依赖项 为了在项目中使用JWT,需先配置`pom.xml`文件来加入必要的库支持: ```xml <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>4.4.0</version> </dependency> ``` 此操作允许开发者利用Auth0提供的API轻松处理编码/解码过程[^3]。 #### 创建Token生成逻辑 通过编写一个名为`JwtUtil.java`的帮助类来进行token的创建与解析工作。以下是简化版的方法示例: ```java import com.auth0.jwt.JWT; import com.auth0.jwt.algorithms.Algorithm; public class JwtUtil { private static final String SECRET_KEY = "your_secret_key"; public static String generateToken(String subject){ Algorithm algorithm = Algorithm.HMAC256(SECRET_KEY); return JWT.create() .withSubject(subject) .sign(algorithm); } } ``` 这段代码展示了如何基于给定的主题信息构建一个新的JWT实例并对其进行加密签署[^2]。 #### 实现Token校验功能 同样是在`JwtUtil.java`内增加如下函数用来检验接收到的token是否有效: ```java public boolean validateToken(String token, String expectedSubject){ try{ Algorithm algorithm = Algorithm.HMAC256(SECRET_KEY); JWT.require(algorithm).withSubject(expectedSubject).build().verify(token); return true; } catch(Exception e){ // Handle exception... return false; } } ``` 该片段负责接收客户端提交过来的身份凭证字符串,并尝试依据预设规则完成有效性判断。 #### 整合至Spring Security框架下 对于采用Spring Boot开发的应用来说,可以通过自定义过滤器的方式将上述工具类融入到现有的安全体系之中。具体做法涉及继承`OncePerRequestFilter`抽象基类重写其doFilterInternal方法,从而实现在每次HTTP请求到达之前自动执行相应的鉴权动作[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值