基于前后端分离的身份认证方式——JWT

什么是JWT
JWT——Json web token
是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准,可实现无状态、分布式的Web应用授权。

现在一般都用redis来出来token做前后端分离,但jwt在某些时候也可以代替redis来处理token。
pom的配置

<dependency>
    <groupId>com.auth0</groupId>
        <artifactId>java-jwt</artifactId>
    <version>3.3.0</version>
</dependency>

简单的使用方法:

 public String generateToken(UserDTO user) {
        Date nowDate = new Date();
        user.setPassword("");
        Date expiryDate = new Date(nowDate.getTime() + jwtExpiration);
        try {
            String newToken = JWT.create()
                    .withSubject(user.getId().toString())
                    .withClaim("current_user", JSON.toJSONString(user))
                    .withIssuedAt(nowDate)
                    .withExpiresAt(expiryDate)
                    .sign(Algorithm.HMAC256(jwtSecret));
            return newToken;
        } catch (UnsupportedEncodingException exception){
            logger.error("Unsupported JWT signature");
        } catch (JWTCreationException exception){
            logger.error("Create JWT signature exception");
        }
        return null;
    }

    public boolean validateToken(String authToken) {
        try {
            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(jwtSecret))
                    .build();
            DecodedJWT jwt = verifier.verify(authToken);
            return true;
        } catch (UnsupportedEncodingException e) {
            logger.error("Unsupported JWT signature");
        } catch (JWTVerificationException exception) {
            logger.error("Verification JWT signature exception");
        }
        return false;
    }

    public Long getUserIdFromJWT(String token) {
        DecodedJWT jwt = JWT.decode(token);
        return Long.parseLong(jwt.getSubject());
    }

    public Date getExpiresDateFromJWT(String token) {
        DecodedJWT jwt = JWT.decode(token);
        return jwt.getExpiresAt();
    }

1,在后端把用户的信息生成token,2,验证过期,3,从token得到你需要的信息,4,得到失效时间
还有些配置设置如下:

# 是否使用app.jwt.test.token的token作为测试(获取用户id为0)
app.jwt.allow.test.token=true
app.jwt.test.token=test_token
app.jwt.secret=jwt_test_$test
# token过期时间,单位是毫秒
app.jwt.expiration=43200000
# token剩余指定时间时刷新,单位是毫秒
app.jwt.refresh.limit=14400000

转载于:https://www.cnblogs.com/ylzhang/p/9804761.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值