JWT 生成token

创建一个springboot项目

导包

1
2
3
4
5
<dependency>
      <groupId>io.jsonwebtoken</groupId>
      <artifactId>jjwt</artifactId>
      <version>0.9.1</version>
</dependency>

创建 一个jwt工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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();
    }
 
}
1
创建一个controller类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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;
    }
 
}

  

  

posted @   小-伙计  阅读(100)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示