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 使用了 uuid id 用 户名三个属性 长度肯定要是 3 才行。(如果不使用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());
}
}
}