基于TOKEN的登录拦截的简单使用规则(设置token过期时间可自己使用redis进行)

1.导入依赖
在这里插入图片描述

2.先导入 token的生成和编译的工具类 JwtUtil.java(工具类放在最后了)

3.在 service业务层 登录验证成功之后 返回用户对象 通过UUID,用户id,用户名 作为依据生成 token (生成token尽量不要使用 密码这些隐秘的操作)并将生成的 token 一并返回到 前端去 如下图

在这里插入图片描述

4.前端可以取出这个 token 并通过localStorage.setItem()设置为前端页面全部可以取token值使用 如下:(这里以 ajax 请求作为实验对象 下面为 成功回调函数)
在这里插入图片描述
5.登录成功之后 别的 ajax 请求 可以用过 localStorage.getItem(“token”) 获取到 token
并将 token 设置到 请求头里面去 访问后端

在这里插入图片描述
设置请求头(在ajax请求中 加入 代码 如下):
在这里插入图片描述
这样就跟随请求传到后端了

6.后端拦截器的判断
1)首先通过 request.getHead(“token”) 获取到 token 然后判断 token 是否存在,
存在的话 分割 判断 长度是否为3 因为token由头部(header),载荷(payload),签证(signature)三个部分构成。(如果不使用redis 确认了 token存在 就等于可以放开拦截了)
2)判断之后 如果有 可以对 token进行 编译 获取到 存进去的对象(这是为了方便用uuid/id 来进行redis的处理 用来获取 token是否失效 等操作 这个自行使用redis进行就行了)

在这里插入图片描述
----------------------------------------JwtUtil 工具类------------------------------------------------------
package com.fh.util;

import com.alibaba.fastjson.JSON;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

public class JwtUtil {

private static final String SECRET_KEY = "sd237#@sd!$%sdk-=";

/**
 * 加密生成token
 *
 * @param object 载体信息
 * @param <T>
 * @return
 */
public static <T> String createToken(T object) {
    try {
        final Algorithm signer = Algorithm.HMAC256(SECRET_KEY);//生成签名
        String token = JWT.create()
                .withSubject(JSON.toJSONString(object))//主题,科目
                .sign(signer);
        return token;
    } catch (Exception e) {
        e.printStackTrace();
        throw new RuntimeException(e.getMessage());
    }
}

/**
 * 解析验证token
 *
 * @param token 加密后的token字符串
 * @return
 */
public static String verifyToken(String token) {
    try {
        Algorithm algorithm = Algorithm.HMAC256(SECRET_KEY);
        JWTVerifier verifier = JWT.require(algorithm).build();
        DecodedJWT jwt = verifier.verify(token);
        return jwt.getSubject();
    } catch (Exception e) {
        throw new RuntimeException(e.getMessage());
    }
}

}

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值