Java基于JWT实现token认证

2022-08-25  本文已影响0人  永远爱你ol

网上关于JWT的文章很多,我想分享一个相对简洁的版本。JWT(JSON Web Tokens),生成的token是由三部分组成的Header,Payload,Signature。其实整个的生成过程就是给这三部分添加一些信息。具体可以看官网的一些介绍:https://jwt.io/introduction

生成token的示例:

   //设置token过期时间为3分钟
    private final static long EXPIRED_TIME = 3 * 60 * 1000;

   //设置token的密钥
    private final static String SECRET = "token123";
    
    public static String token(User user) {
        Date signDate = new Date();
        Date date = new Date(System.currentTimeMillis() + EXPIRED_TIME);//过期时间
        Algorithm algorithm = Algorithm.HMAC256(SECRET);//进行加密算法

        //token的Header信息
        Map<String, Object> map = new HashMap<>();
        map.put("alg", "HS256");
        map.put("typ", "JWT");

        String token=JWT.create()
                      //(token的Header信息)
                        .withHeader(map)
                      //设置当前签发时间(token的Payload信息)
                        .withIssuedAt(signDate)
                      //设置token过期时间(token的Payload信息)
                        .withExpiresAt(date)
                     //自定义存放用户id在tokne中(token的自定义Payload信息)
                        .withClaim("userId", user.getUserId())
                     //自定义存放用户名在token中(token的自定义Payload信息)
                        .withClaim("username", user.getName())
                     //(token的Signature信息)
                        .sign(algorithm);
           return token;
    }

接下来就是验证token:

   public static boolean verifyToken(String token) {
        Algorithm algorithm = Algorithm.HMAC256(SECRET);
        try {
        //这是密钥的校验,同时也可以对其他的一些信息进行校验(比如自定义的用户ID)
            JWTVerifier jwtVerifier = JWT.require(algorithm).build();
       //校验并获取的数据结果
            DecodedJWT decodedJWT = jwtVerifier.verify(token);
       //从数据结果中获取token中的信息
            String result1=decodedJWT.getClaim("username").asString();
       //直接通过token获取数据信息
            String result2=JWT.decode(token).getClaim("userId").asString();
            return true;
        }catch (JWTVerificationException e) {
            e.printStackTrace();
            return false;
        }
    }

最后附上所需要的pom依赖:

        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>3.10.3</version>
        </dependency>
上一篇 下一篇

猜你喜欢

热点阅读