• zbb20190110 jwt生成token


    TokenUtil 
    package com.zbb.app.jwt;
    
    import io.jsonwebtoken.Claims;
    import io.jsonwebtoken.JwtBuilder;
    import io.jsonwebtoken.Jwts;
    import io.jsonwebtoken.SignatureAlgorithm;
    import lombok.extern.slf4j.Slf4j;
    
    import javax.crypto.spec.SecretKeySpec;
    import javax.xml.bind.DatatypeConverter;
    import java.security.Key;
    import java.util.Date;
    
    /**
     * token 生成、解析工具类
     */
    @Slf4j
    public class TokenUtil {
        public static void main(String[] args) {
            String jwtToken = getJWTToken("e3f0e9268f574aa2858d75c7d44ab93a", "cwag");
            System.out.println(jwtToken);
            String accountIdByToken = getAccountIdByToken(jwtToken, "cwag");
            System.out.println(accountIdByToken);
        }
    
        private TokenUtil() {
    
        }
    
        /**
         * 生成Token
         *
         * @param accountId 账户Id
         * @param tokenSalt 加密盐
         * @return token
         */
        public static String getJWTToken(String accountId, String tokenSalt) {
            long nowMillis = System.currentTimeMillis();
            Date now = new Date(nowMillis);
            // 生成签名密钥
            byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(tokenSalt);
            Key signingKey = new SecretKeySpec(apiKeySecretBytes,
                    SignatureAlgorithm.HS256.getJcaName());
            // 添加构成JWT的参数
            JwtBuilder builder = Jwts.builder().setHeaderParam("typ", "JWT")
                    .claim("ACCOUNT_ID", accountId).signWith(SignatureAlgorithm.HS256, signingKey);
            // 生成JWT
            return builder.setNotBefore(now).compact();
        }
    
        /**
         * 解析token值
         *
         * @param jwtToken token值
         * @param tokenSalt 加密盐
         * @return 账户Id
         */
        public static String getAccountIdByToken(String jwtToken, String tokenSalt) {
            try {
                Claims claims = Jwts.parser()
                        .setSigningKey(DatatypeConverter.parseBase64Binary(tokenSalt))
                        .parseClaimsJws(jwtToken).getBody();
                return claims.get("ACCOUNT_ID").toString();
            } catch (Exception ex) {
                log.error("解析token值:" + ex.getMessage());
                return null;
            }
        }
    
    }

    pom

    <!-- JWT -->
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt</artifactId>
                <version>0.9.0</version>
            </dependency>

    提醒运行报错java.security.NoSuchAlgorithmException HmacSHA256 not available.

    buildpath 改成 jdk

  • 相关阅读:
    C#与数据库访问技术总结(十四)之DataAdapter对象
    《运维三十六计》:运维生存宝典
    企业运维几百个重点面试题汇总(老男孩)
    5、KVM虚拟化典型案例:生产环境问题案例与分析
    Linux运维必会的实战编程笔试题(19题)
    面试中常见的 MySQL 考察难点和热点
    Linux系统运维常见面试简答题(36题)
    一键备份脚本 backup.sh
    Linux常用的200个命令总结分类
    2、KVM虚拟化CPU、内存、网络、磁盘技术及性能调优方法
  • 原文地址:https://www.cnblogs.com/super-admin/p/10251487.html
Copyright © 2020-2023  润新知