zoukankan      html  css  js  c++  java
  • 基于前后端分离的身份认证方式——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
    
  • 相关阅读:
    搭建 springboot selenium 网页文件转图片环境
    洛谷P1352没有上司的舞会-题解
    错误集合
    洛谷P1434滑雪-题解
    洛谷P1278单词游戏-题解
    洛谷P1219八皇后-题解
    洛谷P1443马的遍历-题解
    洛谷P1135奇怪的电梯-题解
    经验集合
    洛谷P1019单词接龙-题解
  • 原文地址:https://www.cnblogs.com/ylzhang/p/9804761.html
Copyright © 2011-2022 走看看