首页 > 其他分享 >JWT 生成token

JWT 生成token

时间:2023-10-24 22:56:27浏览次数:40  
标签:return String JWT 生成 secretKey token import

创建一个springboot项目

导包

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

创建 一个jwt工具类

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

import java.util.Date;

/**
 * @Author: xhj
 * @Date: 2023/10/19/21:13
 * @Description:
 */
public class JwtUtil {

    /**
     * 定义过期时间
     */
    private static final long EXPIRATION_TIME = 86400000L;

    /**
     * 生成token
     * @param subject
     * @return
     */
    public static String generateToken(String subject,String secretKey){ //secretKey 密钥
        return Jwts.builder()
                .setSubject(subject)  //表示JWT的主题,通常用于标识请求的发起者或用户
                .setIssuedAt(new Date())  //设置JWT的发行时间为当前时间
                .setExpiration(new Date(System.currentTimeMillis()+EXPIRATION_TIME)) //设置JWT的过期时间为当前时间加上预定义的EXPIRATION_TIME
                .signWith(SignatureAlgorithm.HS512,secretKey)  //使用HS512算法和传入的secretKey对JWT进行签名,以确保其安全性
                .compact();  //将JWT对象转换为紧凑的字符串表示形式
    }
    /**
     * 解析token,获取用户名
     * @param token
     * @return
     */
    public static String getSubjectFromToken(String token,String secretKey){
        Claims claims = Jwts.parser()
                .setSigningKey(secretKey)  //secretKey 密钥
                .parseClaimsJws(token) //生成的token
                .getBody();
        return claims.getSubject();
    }

}
创建一个controller类
import com.xhj.auth.util.JwtUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @Author: xhj
 * @Date: 2023/10/19/20:44
 * @Description:
 */
@RestController
@RequiredArgsConstructor
@RequestMapping("/token")
public class TokenController {

    /**
     * 获取密钥
     */
    @Value("${name}")
    private String SECRET_KEY;

    /**
     * 生成token
     * @param request
     * @param response
     * @return
     */
    @GetMapping("/getToken")
    public String token(HttpServletRequest request,HttpServletResponse response){
        // 生成token
        String token = JwtUtil.generateToken("xhj",SECRET_KEY);
        // 放入session
        request.getSession().setAttribute("token",token);
//        Cookie cookie = new Cookie("token",token);
//        response.addCookie(cookie);
        return token;
    }

    /**
     * 解析token 获取用户名
     * @param request
     * @return
     */
    @GetMapping("/analyzeToken")
    public String analyzeToken(HttpServletRequest request){
        String name = null;
        String token = (String) request.getSession().getAttribute("token");
        if (token!=null){
            name = JwtUtil.getSubjectFromToken(token,SECRET_KEY);
        }
        return name;
    }

}

  

  

标签:return,String,JWT,生成,secretKey,token,import
From: https://www.cnblogs.com/xhj-z/p/17785943.html

相关文章

  • [转]VS2019生成项目文件.lib或.dll或exe后如何拷贝到指定的目录文件夹
    VS2019编译CloudCompare,发现生成的项目文件都是分开的,每个项目下都有自己的文件夹Debug/Release,生成Dll都放在这些单独的项目文件夹内。目标(1)通常,我们要求所有的dll和.exe都在同一个文件夹,这样调试的时候就不用再去拷贝或设置环境变量,直接设置任意.exe项目为启动项目就能调试了......
  • ChatGPT中文资源站 同样是多模态更贴近使用习惯模版多一句生成人工智能
    随着人工智能技术的快速发展,我们迎来了智能化时代的蓬勃发展。在这个时代中,ChatGPT作为一种强大的人工智能技术,已经在众多领域展现出了惊人的潜力。你可能对ChatGPT的中文版产生了浓厚的兴趣。那么,不妨让我向你介绍一个令人兴奋的消息——ChatGPT中文镜像站。ChatGPT中文镜像站是一......
  • SQLServer2008/2005 生成数据字典语句
    SELECT表名=casewhena.colorder=1thend.nameelse''end,表说明=casewhena.colorder=1thenisnull(f.value,'')else''end,字段序号=a.colorder,字段名=a.name,标识=casewhenCO......
  • 软件测试|如何在GitHub生成个人token?
    简介在GitHub上生成个人访问令牌(PersonalAccessToken)是一种安全的方式,用于进行API请求、访问私有仓库、或者执行其他需要身份验证的操作。本文将详细介绍如何在GitHub上生成个人访问令牌。步骤1:登录GitHub帐户如果还未注册GitHub账户,需要先注册一个GitHub账户,这里我们不......
  • 成品直播源码推荐,用JNI生成so文件,加密解密需要的hascode生成代码
    成品直播源码推荐,用JNI生成so文件,加密解密需要的hascode生成代码try{      PackageInfopackageInfo=getPackageManager().getPackageInfo(getPackageName(),PackageManager.GET_SIGNATURES);      Signature[]signs=packageInfo.signatures; ......
  • JWT Tool:针对 JSON Web Tokens 的测试工具题解JWT cracking
    什么是JWT?JWT是JSONWebToken的缩写,它是一串带有声明信息的字符串,由服务端使用加密算法对信息签名,以保证其完整性和不可伪造性。Token里可以包含所有必要的信息,这样服务端就无需保存任何关于用户或会话的信息了。JWT可用于身份认证,会话状态维持以及信息交换等任务。JWT由三部分......
  • json的解析和生成(两种方式对比)(二)
    一:解析JSON文件       解析JSON文件用到两种方法都可以,即两种类库,都可以     用到的类库      JavaScriptSerializer类,内置于.NET中用于解析的生成JSON文件      JSON.NET库,第三方加载包    第一种用:NET自带的JavaScriptSerializer     ......
  • kubernetes获取永久token
    kubernetes获取永久token概述1.22版本之前都是自动创建sa的token,1.22及之后版本永久token需要使用kubernetes.io/service-account-token类型创建secret步骤服务账号令牌Secret类型为kubernetes.io/service-account-token的Secret用来存放标识某服务账号的令牌凭据。说......
  • 我的世界1.20.1模组开发---3.数据生成
    介绍  我们在模组里每添加一个物品或方块后,在游戏里显示的都只是马赛克,因为我们还没有为我们的物品或方块设置对应的模型贴图。我的世界游戏里,每一个物品和方块我们所看到的样子都是一张张贴图,就是画的像素画,贴在了一个模型表面。我们想设置对应的贴图,需要写一个对应的json文件......
  • Python生成器
    Python生成器1、什么是生成器根据程序员制定的规则循环生成数据,当规则不成立时则生成数据结束。数据不是一次性全部生成出来的,而是使用一个,再生成一个,可以节约大量的内存。创建生成器的方式:①生成器推导式②yield关键字2、生成器推导式#创建生成器#生成器推导式=》(......