JWTUtils

jwt工具类

package com.example.utils;
import io.jsonwebtoken.*;
import org.springframework.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
//JWT工具类
public class JWTUtils {
    //密钥
    private static final String SALT = "kxoif%$*hdas$@_dlsd";
    //过期时间
    private static final Integer EXPIRE_TIME = 1000 * 60 * 30;
    //生成token
    public static String getToken(String id,String name){
        String token = Jwts.builder()
                //设置开始时间
                .setIssuedAt(new Date(System.currentTimeMillis()))
                //设置有效期
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRE_TIME))
                //设置用户声明
                .claim("id", id)
                .claim("name", name)
                //签名
                .signWith(SignatureAlgorithm.HS256, SALT)
                .compact();
        System.out.println(token);
        return token;
    }
    //验证token
    public static boolean isExpire(String token){
        if(StringUtils.isEmpty(token)){
            return true;
        }
        try {
            Jwts.parser().setSigningKey(SALT).parseClaimsJws(token);
        } catch (Exception e) {
            e.printStackTrace();
            return true;
        }
        return false;
    }
    public static boolean isExpire(HttpServletRequest request){
        String token = request.getHeader("token");
        if(StringUtils.isEmpty(token)){
            return false;
        }
        try {
            Jwts.parser().setSigningKey(SALT).parseClaimsJws(token);
        } catch (Exception e) {
            e.printStackTrace();
            return true;
        }
        return false;
    }
    //获取用户id
    public static String getId(String token){
        Claims body = Jwts.parser().setSigningKey(SALT).parseClaimsJws(token).getBody();
        return (String) body.get("id");
    }
    public String getId(HttpServletRequest request){
        String token = request.getHeader("token");
        Claims body = Jwts.parser().setSigningKey(SALT).parseClaimsJws(token).getBody();
        return (String) body.get("id");
    }

}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JWT的用法: 客户端接收服务器返回的JWT,将其存储在Cookie或localStorage中。 此后,客户端将在与服务器交互中都会带JWT。如果将它存储在Cookie中,就可以自动发送,但是不会跨域,因此一般是将它放入HTTP请求的Header Authorization字段中。当跨域时,也可以将JWT被放置于POST请求的数据主体中。 JWT问题和趋势: JWT不仅可用于认证,还可用于信息交换。善用JWT有助于减少服务器请求数据库的次数。 生产的token可以包含基本信息,比如id、用户昵称、头像等信息,避免再次查库 存储在客户端,不占用服务端的内存资源 JWT默认不加密,但可以加密。生成原始令牌后,可以再次对其进行加密。 当JWT未加密时,一些私密数据无法通过JWT传输。 JWT的最大缺点是服务器不保存会话状态,所以在使用期间不可能取消令牌或更改令牌的权限。也就是说,一旦JWT签发,在有效期内将会一直有效。 JWT本身包含认证信息,token是经过base64编码,所以可以解码,因此token加密前的对象不应该包含敏感信息,一旦信息泄露,任何人都可以获得令牌的所有权限。为了减少盗用,JWT的有效期不宜设置太长。对于某些重要操作,用户在使用时应该每次都进行进行身份验证。 为了减少盗用和窃取,JWT不建议使用HTTP协议来传输代码,而是使用加密的HTTPS协议进行传输。
在给定的引用内容中,没有提到`jwtutils.parseJwt`这个函数。如果你需要解析JWT,你可以使用`JwtBuilder`创建一个JWT,并使用`Claims`进行解析。具体的步骤如下: 1. 使用`JwtBuilder`创建一个JWT,将用户信息作为payload的一部分加入到JWT中。这可以通过生成一个JWT token并将用户信息作为用户自定义的claims添加到token中来实现。 2. 在需要解析JWT的地方,使用`Claims`类来解析JWT。通过提供JWT token和秘钥,可以获取JWT中的信息,如用户ID。 值得注意的是,在给定的引用内容中,并没有提到`jwtutils.parseJwt`这个函数,所以具体的实现方式可能有所不同。但是,使用`JwtBuilder`和`Claims`进行JWT的创建和解析是一种常见的方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [JwtUtils.java](https://download.csdn.net/download/qq_39089910/12825266)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [JWT](https://blog.csdn.net/qq_44854784/article/details/99711526)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值