• JWT 获取tooken


    <properties>
    <jwt.version>0.7.0</jwt.version>
    </properties>

    <dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>${jwt.version}</version>
    </dependency>
    /**
    * jwt工具类
    *
    */
    @ConfigurationProperties(prefix = "sqx.jwt")
    @Component
    public class JwtUtils {
    private Logger logger = LoggerFactory.getLogger(getClass());
    //密钥
    private String secret;
    //时间
    private long expire;
    private String header;

    /**
    * 生成jwt token
    */
    public String generateToken(long userId) {
    Date nowDate = new Date();
    //过期时间
    Date expireDate = new Date(nowDate.getTime() + expire * 1000);
    // jwt实例
    return Jwts.builder()
    // 设置header
    .setHeaderParam("typ", "JWT")
    .setSubject(userId+"")//代表这个JWT的主体 个人标识
    .setIssuedAt(nowDate)//iat: jwt的签发时间
    .setExpiration(expireDate)//设置过期时间
    .signWith(SignatureAlgorithm.HS512, secret)//设置签名使用的签名算法和签名使用的秘钥
    .compact(); //开始压缩
    }

    public Claims getClaimByToken(String token) {
    try {
    return Jwts.parser()
    .setSigningKey(secret)
    .parseClaimsJws(token)
    .getBody();
    }catch (Exception e){
    logger.debug("validate is token error ", e);
    return null;
    }
    }

    /**
    * token是否过期
    * @return true:过期
    */
    public boolean isTokenExpired(Date expiration) {
    return expiration.before(new Date());
    }

    public String getSecret() {
    return secret;
    }

    public void setSecret(String secret) {
    this.secret = secret;
    }

    public long getExpire() {
    return expire;
    }

    public void setExpire(long expire) {
    this.expire = expire;
    }

    public String getHeader() {
    return header;
    }

    public void setHeader(String header) {
    this.header = header;
    }
    }

    yml

    sqx:
    # APP模块,是通过jwt认证的,如果要使用APP模块,则需要修改【加密秘钥】
    jwt:
    # 加密秘钥
    secret: *************
    # token有效时长,7天,单位秒
    expire: 604800
    header: token
  • 相关阅读:
    【REACT HOOKS】useState是如何保存并更新数据的?
    CSS Modules 使用
    【TS】一些常用的工具类型
    【TS】type和interface的区别
    【TS】unknown类型
    判断虚拟导航栏(NavigationBar)是否显示
    本地的FTP服务器
    Cocos2d-x3.3RC0的Android编译Activity启动流程分析
    Eclipse/MyEclipse 最最常用的快捷键
    anroidstudio log
  • 原文地址:https://www.cnblogs.com/lyy0622/p/15135352.html
Copyright © 2020-2023  润新知