• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

Jwt快速入门(copy即可)

开发技术 开发技术 4周前 (09-06) 24次浏览

Jwt

  • 什么是jwt

    • JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法。
  • 互联网服务离不开用户认证。一般流程是下面这样。

    1、用户向服务器发送用户名和密码。

    2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。

    3、服务器向用户返回一个 session_id,写入用户的 Cookie。

    4、用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。

    5、服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。

导入依赖

<!-- https://mvnrepository.com/artifact/com.auth0/java-jwt -->
<dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>3.10.3</version>
</dependency>

编写工具类

package com.botao.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;

/**
 * @author 星时代曹波涛
 */
public class JwtUtils {
    /**
     * 签名
     */
    private static final String SING = "!@#$%^&*(^432142@#$^&";

    public static String getToken(Map<String, String> map) {
        Calendar calendar = Calendar.getInstance();
        //设置过期时间为7天
        calendar.add(Calendar.DATE, 7);
        JWTCreator.Builder builder = JWT.create();
        map.forEach(builder::withClaim);
        String token = builder.withExpiresAt(calendar.getTime())
                .sign(Algorithm.HMAC256(SING));
        return token;
    }

    public static String getToken() {
        Map<String, String> map = new HashMap<String, String>(4);
        return getToken(map);
    }


    public static boolean verify(String token){
        try {
            JWT.require(Algorithm.HMAC256(SING)).build().verify(token);
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    public static DecodedJWT getMsg(String token){
        try {
            return JWT.require(Algorithm.HMAC256(SING)).build().verify(token);
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }
}

代码测试

    @Test
    public void test(){
        HashMap<String, String> map = new HashMap<>();
        map.put("username","张三");
        String token = JwtUtils.getToken(map);
        System.out.println("token:"+token);
        System.out.println("结果:===》"+JwtUtils.verify(token));
        System.out.println("信息:===》"+JwtUtils.getMsg(token).getClaim("username").asString());
    }

运行结果

token:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1OTk5ODM1MjUsInVzZXJuYW1lIjoi5byg5LiJIn0.SIKyAbXZ_1FhVb9wr2DoP6PyqwMm_i0RQYNtmiB6umk
结果:===》true
信息:===》张三

喜欢 (0)