结合hutool的JWT工具类,开箱即用。

hutool简介

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;

Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。

hutool官网

引入依赖

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.16</version>
</dependency>

JWT

JWT(JSON WEBTOKEN):JSON网络令牌,JWT是一个轻便的安全跨平台传输格式,定义了一个紧凑的自包含的方式在不同实体之间安全传输信息(JSON格式)。它是在Web环境下两个实体之间传输数据的一项标准。实际上传输的就是一个字符串。广义上讲JWT是一个标准的名称;狭义上JWT指的就是用来传递的那个token字符串

JWT官网

JWT原理

在这里插入图片描述

JWT组成

JWT由三部分组成:

  • Header(头部)
  • Payload(负载)
  • Signature(签名)

因此,JWT通常如下所示:

xxxxxxxxxxxxxxx.yyyyyyyyyyyyyyyyyyyyyyyyy.mmmmmmmmmmmmmmmmmm

JWT工具类

public class JwtUtil {

    // 密钥
    private final static String SIGN = "123456";
    // token有效时长 (小时)
    private final static int EXPIRE_TIME = 2;

    /**
     * 生成token
     * @param map 传入payload(信息体)
     * @return
     */
    public static String getToken(Map<String, Object> map) {
        String token = JWT.create()
                // 信息体
                .addPayloads(map)
                // 密钥
                .setKey(SIGN.getBytes())
                // 过期时间(2小时)
                .setExpiresAt(DateUtil.offsetHour(DateUtil.date(), EXPIRE_TIME))
                .sign();
        return token;
    }

    /**
     * 验证token
     * @param token 传入token
     * @return
     */
    public static Boolean validationToken(String token) {
        // 验证token是否有效
        if (JWTUtil.verify(token, SIGN.getBytes())) {
            // 验证token是否过期
            try {
                JWTValidator.of(token).validateDate();
            } catch (ValidateException e) {
                return false;
            }
        }
        return true;
    }

    /**
     * 解析token
     * @param token 传入token
     * @return
     */
    public static JSONObject parseToken(String token) {
        // 验证token
        if (validationToken(token)) {
            return JWTUtil.parseToken(token).getPayloads();
        }
        // token无效 换成自己项目异常处理
        return null;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
DRF(Django Rest Framework)是一个基于Django的强大而灵活的Web API框架。JWT(JSON Web Token)是一种用于身份验证和授权的开放标准。关于手写JWT,你可以按照以下步骤进行操作: 1. 首先,安装`djangorestframework_simplejwt`库,它提供了DRF的JWT认证支持。 2. 在Django的设置文件中配置JWT相关的参数,如密钥、过期时间等。 3. 创建一个自定义的Token生成函数或视图。你可以使用`rest_framework_simplejwt.tokens.AccessToken`类来生成JWT Token。在自定义的Token生成函数或视图中,你需要使用用户的身份信息(如用户名、ID等)来生成Token。 4. 在DRF的视图中使用JWT认证类,以确保只有带有有效Token的请求才能访问相关资源。你可以在视图类或全局设置中设置JWT认证类。 5. 在前端页面中,通过发送包含用户名和密码等凭据的请求来获取JWT Token。你可以使用JavaScript的`fetch`或jQuery的`$.ajax`方法发送POST请求,并将返回的Token保存在前端的本地存储或Cookie中。 6. 在后续的请求中,将JWT Token包含在请求的头部或参数中进行身份验证。你可以在请求头部中添加`Authorization: Bearer <Token>`,或在请求参数中添加`?token=<Token>`。 通过以上步骤,你就可以手写JWT认证功能并在DRF中使用了。记得在每个请求中进行Token的验证和刷新,并处理Token的过期和失效问题,以提高系统的安全性和用户体验。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【DjangoDRF+缓存+JWT+RabbitMQ 七万字总结】](https://blog.csdn.net/tc9527_/article/details/127235921)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨洋阳和羊羊羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值