SpringBoot学习笔记【part15】整合JWT生成token

一、JWT介绍

JWTJson Web Token)是为了在网络应用环境间传递声明而执行的一种基于 JSON 的开放标准。JWT 最重要的作用就是对 token 信息的防伪作用。

JWT 原理:由三个部分组成:公共部分、私有部分、签名部分,最后由这三者组合进行base64编码得到 JWT。

在这里插入图片描述

说明
公共部分主要是该 JWT 的相关配置参数,比如签名的加密算法、格式类型、过期时间等等。
私有部分用户自定义的内容,根据实际需要真正要封装的信息。
签名部分主要用户对 JWT 生成字符串的时候,进行加密 {盐值}
base64编码并不是加密,只是把明文信息变成了不可见的字符串。
但是其实只要用一些工具就可以把base64编码解成明文,所以不要在 JWT 中放入涉及私密的信息。

二、整合 JWT

第一步,引入依赖。

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

第二步,编写 JwtHelper 工具类。

public class JwtHelper {
    private static long tokenExpiration = 2*60*60*1000; //2小时
    private static String tokenSignKey = "parker7"; //加密密钥

    /**
     * 根据参数生成token
     * @param userId
     * @param userName
     * @return
     */
    public static String createToken(Long userId, String userName) {
        String token = Jwts.builder()
                .setSubject("IMEDI-USER")
                //设置过期时间
                .setExpiration(new Date(System.currentTimeMillis() + tokenExpiration))
                //设置token主体
                .claim("userId", userId)
                .claim("userName", userName)
                //设置加密为哈希
                .signWith(SignatureAlgorithm.HS512, tokenSignKey)
                .compressWith(CompressionCodecs.GZIP)
                .compact();
        return token;
    }

    /**
     * 根据token字符串反向得到用户id
     * @param token
     * @return
     */
    public static Long getUserId(String token) {
        if(StringUtils.isEmpty(token)) return null;
        Jws<Claims> claimsJws = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
        Claims claims = claimsJws.getBody();
        Integer userId = (Integer)claims.get("userId");
        return userId.longValue();
    }

    /**
     * 根据token字符串反向得到用户名
     * @param token
     * @return
     */
    public static String getUserName(String token) {
        if(StringUtils.isEmpty(token)) return "";
        Jws<Claims> claimsJws
                = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
        Claims claims = claimsJws.getBody();
        return (String)claims.get("userName");
    }

    //测试用主类
    public static void main(String[] args) {
        String token = JwtHelper.createToken(7L, "parker");
        System.out.println(token);
        System.out.println(JwtHelper.getUserId(token));
        System.out.println(JwtHelper.getUserName(token));
    }
}

第三步,在相关 Service 接口中调用 JwtHelper 来生成 token。

public Map<String, Object> login(LoginVo loginVo) {
    ......
    //jwt生成token字符串
    String token = JwtHelper.createToken(loginVo.getId(), name);
    map.put("token",token);
    return map;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在使用Spring Boot生成JWT(JSON Web Token)的过程中,你可以按照以下步骤进行操作: 1. 首先,确保你的Spring Boot项目已经集成了相关的依赖。你可以在`pom.xml`文件中添加以下依赖: ```xml <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.11.2</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>0.11.2</version> <scope>runtime</scope> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>0.11.2</version> <scope>runtime</scope> </dependency> ``` 2. 创建一个`JwtUtil`类,用于生成JWT。你可以在该类中定义以下方法: ```java import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import org.springframework.stereotype.Component; import java.util.Date; @Component public class JwtUtil { private final String secret = "your-secret-key"; private final long expiration = 86400000; // 过期时间,单位为毫秒 public String generateToken(String username) { Date now = new Date(); Date expiryDate = new Date(now.getTime() + expiration); return Jwts.builder() .setSubject(username) .setIssuedAt(now) .setExpiration(expiryDate) .signWith(SignatureAlgorithm.HS512, secret) .compact(); } public String getUsernameFromToken(String token) { Claims claims = Jwts.parser() .setSigningKey(secret) .parseClaimsJws(token) .getBody(); return claims.getSubject(); } public boolean validateToken(String token) { try { Jwts.parser().setSigningKey(secret).parseClaimsJws(token); return true; } catch (Exception ex) { return false; } } } ``` 3. 在你的用户认证逻辑中使用`JwtUtil`类生成和验证JWT。例如,在登录成功后生成JWT: ```java @Autowired private JwtUtil jwtUtil; public ResponseEntity<?> login(String username, String password) { // 验证用户名密码逻辑... // 生成JWT String token = jwtUtil.generateToken(username); // 返回响应,包含JWT return ResponseEntity.ok(new JwtResponse(token)); } ``` 这样,你就可以使用Spring BootJWT生成和验证token了。记得将`your-secret-key`替换为你自己的密钥。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Parker7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值