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
    
  • 相关阅读:
    Redis源码分析(二十一)--- anet网络通信的封装
    leetcode 总结part1
    leetcode String to Integer (atoi)
    leetcode 165. Compare Version Numbers
    leetcode 189. Rotate Array
    leetcode 168. Excel Sheet Column Title
    leetcode 155. Min Stack
    leetcode 228. Summary Ranges
    leetcode 204. Count Primes
    leetcode 6. ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/ylzhang/p/9804761.html
Copyright © 2011-2022 走看看