Day49(19)-F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project02\tlias-web-management

登录设置

image-20251128135124345

image-20251128143640985

HTTP:无状态响应:本次响应不携带上一次响应内容

image-20251128144110139

image-20251128144715786

image-20251128151521020

image-20251128151618478

image-20251128153128208

image-20251128153153061

image-20251128153429284

image-20251128153527031

image-20251128153458955

JWT令牌

image-20251128165409248

image-20251128165500065

老版本

package com.itheima;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.junit.jupiter.api.Test;

import java.util.Date;
import java.util.HashMap;

public class JwtTest {
    /**
     * 生成JWT令牌旧版本
     */
    @Test
    public void testGenerateJwt(){
        HashMap<String, Object> dataMap = new HashMap<>();
        dataMap.put("id",1);
        dataMap.put("username","admin");

        String jwt = Jwts.builder().signWith(SignatureAlgorithm.HS256, "aXRoZWltYQ==")//指定加密算法和密钥
                .addClaims(dataMap)//添加自定义信息
                .setExpiration(new Date(System.currentTimeMillis() + 60 * 1000))//设置过期时间
                .compact();//生成令牌
        System.out.println(jwt);
    }
    /**
     *解析JWT令牌
     */
    @Test
    public void testParseJWT(){
        String token = "eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsImV4cCI6MTc2NDMyMjE2NH0.AlOIPixvMm1I9oMyl8bkaVTITrtvKpICIoH-xZGZbC0";
        Claims claims = Jwts.parser().setSigningKey("aXRoZWltYQ==")//指定密钥
                .parseClaimsJws(token)//解析令牌
                .getBody();//获取自定义信息
        System.out.println(claims);
    }
}

image-20251128174124636

image-20251128174306864

package com.itheima;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.junit.jupiter.api.Test;

import java.util.Date;
import java.util.HashMap;

public class JwtTest {
//    /**
//     * 生成JWT令牌旧版本
//     */
//    @Test
//    public void testGenerateJwt(){
//        HashMap<String, Object> dataMap = new HashMap<>();
//        dataMap.put("id",1);
//        dataMap.put("username","admin");
//
//        String jwt = Jwts.builder().signWith(SignatureAlgorithm.HS256, "aXRoZWltYQ==")//指定加密算法和密钥
//                .addClaims(dataMap)//添加自定义信息
//                .setExpiration(new Date(System.currentTimeMillis() + 60 * 1000))//设置过期时间
//                .compact();//生成令牌
//        System.out.println(jwt);
//    }
//    /**
//     *解析JWT令牌
//     */
//    @Test
//    public void testParseJWT(){
//        String token = "eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsImV4cCI6MTc2NDMyMjE2NH0.AlOIPixvMm1I9oMyl8bkaVTITrtvKpICIoH-xZGZbC0";
//        Claims claims = Jwts.parser().setSigningKey("aXRoZWltYQ==")//指定密钥
//                .parseClaimsJws(token)//解析令牌
//                .getBody();//获取自定义信息
//        System.out.println(claims);
//    }
}
package com.itheima;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.JwtParserBuilder;
import io.jsonwebtoken.io.Decoders;
import io.jsonwebtoken.security.Keys;
import org.junit.jupiter.api.Test;
import io.jsonwebtoken.Jwts;

import javax.crypto.SecretKey;
import java.security.Key;
import java.util.Date;
import java.util.HashMap;

public class JwtNewTest {
    // 1. 复制必要的常量和辅助方法:abcdefghijklmnopqrstuvwxyz0123456789
    private static final String SECRET_KEY = "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5";

    private static SecretKey getSigningKey() {
        byte[] keyBytes = Decoders.BASE64.decode(SECRET_KEY);
        return Keys.hmacShaKeyFor(keyBytes);
    }

    /**
     * 生成JWT令牌新版本
     */
    @Test
    public void testGenerateJwt(){

        HashMap<String, Object> map = new HashMap<>();
        map.put("id",1);
        map.put("username","admin");

        String jwt = Jwts.builder()
                .signWith(getSigningKey())//密钥:新版的需要
                .claims(map)//自定义信息
                .expiration(new Date(System.currentTimeMillis() + 3600 * 1000))
                .compact();
        System.out.println(jwt);
    }

    @Test
    public void testParseJWT(){
        String token = "eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsImV4cCI6MTc2NDMyODA0OH0.-P0YM86RPP7hTyPQ8ULO8Y-yedAbubi94G8Xs0JKcUA";
        Claims claims = Jwts.parser()
                .verifyWith(getSigningKey())
                .build()
                .parseSignedClaims(token)//返回 Jwt<Claims> 对象,封装了JWT令牌的完整结构
                .getPayload();//提取实际数据的关键步骤
        System.out.println(claims);
    }
}
package com.itheima.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.io.Decoder;
import io.jsonwebtoken.io.Decoders;
import io.jsonwebtoken.security.Keys;

import javax.crypto.SecretKey;
import java.security.Key;
import java.util.Date;
import java.util.Map;

import static org.yaml.snakeyaml.tokens.Token.ID.Key;

public class JwtUtils {
    private static final String SECRET_KEY = "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5";
    private static final long EXPIPRATION = 7*24*60*60*1000;//7天

    public static SecretKey getSigningKey(){
        byte[] decode = Decoders.BASE64.decode(SECRET_KEY);
        return Keys.hmacShaKeyFor(decode);
    }

    /**
     * 生成JWT令牌
     * @param map
     * @return
     */
    public static String generateKey(Map<String,Object>map){
        return Jwts.builder()
                .signWith(getSigningKey())
                .claims(map)
                .expiration(new Date(System.currentTimeMillis()+EXPIPRATION))
                .compact();
    }

    /**
     * 解析令牌
     * @param token
     * @return
     */
    public static Claims parseToken(String token) throws Exception{
        return Jwts.parser()
                .verifyWith(getSigningKey())
                .build()
                .parseSignedClaims(token)
                .getPayload();
    }
}
posted @ 2025-11-28 19:58  David大胃  阅读(0)  评论(0)    收藏  举报