zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    [大牛翻译系列]Hadoop(4)MapReduce 连接:选择最佳连接策略
    [大牛翻译系列]Hadoop(2)MapReduce 连接:复制连接(Replication join)
    [大牛翻译系列]Hadoop(3)MapReduce 连接:半连接(Semijoin)
    [大牛翻译系列]Hadoop(1)MapReduce 连接:重分区连接(Repartition join)
    Springboot启动流程分析
    行为型模式模板&策略&命令
    Springboot自动装配原理
    Springboot零配置原理
    行为型模式中介者&迭代器&访问者
    结构型模式组合&享元
  • 原文地址:https://www.cnblogs.com/super-admin/p/10251487.html
Copyright © 2011-2022 走看看