token相关,jwtUtil操作,测试一个小功能

jwtUtil类

import com.alibaba.fastjson.JSON;
import com.leyou.common.auth.entity.Users;
import io.jsonwebtoken.*;
import org.joda.time.DateTime;

import javax.crypto.spec.SecretKeySpec;
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import java.security.Key;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.Base64;
import java.util.UUID;


public class JwtUtils {
    private static final String JWT_PAYLOAD_USER_KEY = "users";
    private static  String TOKEN_SECRET = "";
    static  SignatureAlgorithm algorithm= SignatureAlgorithm.HS256;;



    /**
     * 私钥加密token
     *
     * @param userInfo   载荷中的数据
     * @param expire     过期时间,单位分钟
     * @return JWT
     */
    public static String generateTokenExpireInMinutes(Users userInfo,  int expire) {
        ByteArrayOutputStream bos = new ByteArrayOutputStream(512);
        for (int i = 98; i < 108; i++) {
            for (int i1 = 0; i1 < 10; i1++) {
                bos.write(i);
            }
            bos.write(i+1);
            bos.write(i+1);
            bos.write(i+-1);
        }
        final String users = JSON.toJSONString(userInfo);
        TOKEN_SECRET= bos.toString();
        SecretKeySpec secretKeySpec = new SecretKeySpec(TOKEN_SECRET.getBytes(), SignatureAlgorithm.HS256.getJcaName());
        return Jwts.builder()
                .claim(JWT_PAYLOAD_USER_KEY,users)//添加自定义的数据
                .signWith(SignatureAlgorithm.HS256, TOKEN_SECRET)
                .setExpiration(DateTime.now().plusMinutes(expire).toDate())
                .compact();


    }
    /**
     * 公钥解析token
     *
     * @param token     用户请求中的token
     * @return Jws<Claims>
     */
    private static Jws<Claims> parserToken(String token) {
        return Jwts.parser().setSigningKey(TOKEN_SECRET).parseClaimsJws(token);
    }

    /**
     * 获取token中的用户信息
     *
     * @param token     用户请求中的令牌
     * @return 用户信息
     */
        public static Users getInfoFromToken(String token) {
        Jws<Claims> claimsJws = parserToken(token);
        Claims body = claimsJws.getBody();
            final Users users = new Users();
            final String string = body.get(JWT_PAYLOAD_USER_KEY).toString();
            final Users user = JSON.parseObject(string, Users.class);
            return user;
    }


}

Users类,

import lombok.Data;

@Data
public class Users {
    private String username;
    private String telephone;
    private String pasword;
}

 测试类

import com.leyou.common.auth.entity.Users;
import com.leyou.common.utils.JwtUtils;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class test {
    public static void main(String[] args) throws IOException {

        final Users users = new Users();
        users.setUsername("sss");
        users.setPasword("123");
        users.setTelephone("1239654");
        final String token = JwtUtils.generateTokenExpireInMinutes(users, 60);
        final Users infoFromToken = JwtUtils.getInfoFromToken(token);
        System.out.println(infoFromToken);
    }
}

测试token的使用。

猜你喜欢

转载自www.cnblogs.com/Koaler/p/12540713.html