Spring-Boot实现jwt加密

文章介绍了JWT的构成和优点,如减轻服务端压力和防止数据篡改,同时指出其可扩展性和安全性问题。在SpringBoot环境中,展示了如何创建JWT配置类,包括生成和解析JWTtoken的方法,以及系统的YML配置和依赖项。此外,文章还提供了一个实际场景应用示例,用于加密和解密数据。
摘要由CSDN通过智能技术生成

JWT主要分成三个部分组成

Jwt生成:
Base64.ENcode(header).Base64.ENcode(PayLoad).签名值

Jwt优点:
1、减轻服务端压力。
2、查询效率比token高。
3、不容易被客户端篡改数据。
缺点:
1、如果一旦生成好一个jwt之后,后期是否可以销毁
2、Jwt playload数据多,占据服务器端带宽资源
jwt不是很安全,playload中不能存放敏感的信息,必要须加密

代码实现:

一、在spring-boot中创建jwt配置类

package com.test.test.config;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.util.Date;

@Configuration
public class JwtConfig {

    @Value("${jwt.secret}")//注入系统密钥属性
    private String secret;

    @Value("${jwt.expire}")//注入系统时效属性
    private Long expire;

    public String generateToken(String data) {
        SignatureAlgorithm algorithm = SignatureAlgorithm.HS256;
        byte[] keyBytes = secret.getBytes();
        Key key = new SecretKeySpec(keyBytes, algorithm.getJcaName());

        JwtBuilder builder = Jwts.builder()
                .setId(data)
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + expire))
                .signWith(algorithm, key);
        return builder.compact();
    }

    public String decodeToken(String token) {
        SignatureAlgorithm algorithm = SignatureAlgorithm.HS256;
        byte[] keyBytes = secret.getBytes();
        Key key = new SecretKeySpec(keyBytes, algorithm.getJcaName());

        Claims claims = Jwts.parser()
                .setSigningKey(key)
                .parseClaimsJws(token)
                .getBody();
        return claims.getId();
    }

}

二、系统yml配置与需要导入的jwt配置如下

yml: 

spring:
jwt:
  secret: <你的密钥>
  expire: <失效时间,以毫秒为单位>

pom.xml: 

<!-- 引入jwt-->
<dependency>
  <groupId>io.jsonwebtoken</groupId>
  <artifactId>jjwt</artifactId>
  <version>0.9.1</version>
</dependency>

三、实际场景应用

@Autowired
private JwtConfig jwtConfig;



@PostMapping("test")
public String Test(@RequestBody Map<String,Object> map) {
    String encoded = jwtConfig.generateToken((String) map.get("传入的需加密的数据"));
    System.out.println("加密后为:" + encoded);
    String decoded = jwtConfig.decodeToken(encoded);
    System.out.println("解密后为:" + decoded);
    return encoded;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值