JWT 生成token
创建一个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;
}
}

浙公网安备 33010602011771号