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

  • 相关阅读:
    远程推送(个推)
    transform3D实现翻页效果
    启发式搜索 A*算法的OC 实现
    IOS 高级开发 KVC(二)
    IOS 高级开发 KVC(一)
    IOS 应用程序启动加载过程(从点击图标到界面显示)
    堆排序的OC实现
    iOS 高级开发 runtime(三)
    IOS 高级开发 runtime(二)
    RxSwift
  • 原文地址:https://www.cnblogs.com/super-admin/p/10251487.html
Copyright © 2011-2022 走看看