java token登录令牌
Posted guxiaohai_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java token登录令牌相关的知识,希望对你有一定的参考价值。
一:简介
- token 值: 登录令牌.利用 token 值来判断用户的登录状态.类似于 MD5 加密之后的长字符串
用户登录成功之后,在后端(服务器端)会根据用户信息生成一个唯一的值.这个值就是 token 值
生成完之后将token值返回给前端,前端存储cookie或session中,每次请求接口需要携带token值,后端会进行相应判断,如果过期或者当前值不相同则进行拦截
二:编码
- MD5加密
/**
* @Author: guwenhai
* @Description: MD5加密
* @Date: 11:41 2020/6/11
*/
public static String getMD5Str(String str) {
byte[] digest = null;
try {
MessageDigest md5 = MessageDigest.getInstance("md5");
digest = md5.digest(str.getBytes("utf-8"));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//16是表示转换为16进制数
String md5Str = new BigInteger(1, digest).toString(16);
return md5Str;
}
- 生成token
/**
* 加密
* @param object 加密数据
* @param maxTime 有效期(毫秒数)
* @param <T>
* @return
*/
public static <T> String encode(T object,long maxTime){
try{
//秘钥加密
final JWTSigner signer=new JWTSigner(SECRET);
final Map<String ,Object> data=new HashMap<>(10);
//存入的信息
data.put(PAYLOAD,object);
//有效日期时间
data.put(EXP,System.currentTimeMillis()+maxTime);
//生成加密字符串
return signer.sign(data);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
- 解密token
/**
* 数据解密
* @param jwt 解密数据
* @return
* @throws Exception
*/
public static ReturnBase decode(String jwt) throws Exception{
ReturnBase returnData = new ReturnBase(StatusCode.Success);
//获取秘钥
final JWTVerifier jwtVerifier=new JWTVerifier(SECRET);
final Map<String,Object> data=jwtVerifier.verify(jwt);
//判断数据是否超时或者符合标准
if(data.containsKey(EXP)&&data.containsKey(PAYLOAD)){
//有效期时间戳
long exp = (long) data.get(EXP);
//当前时间戳
long currentTimeMillis = System.currentTimeMillis();
if(exp > currentTimeMillis){
//解析数据信息
Map<String,Object> json= (Map<String, Object>) data.get(PAYLOAD);
returnData.setData(json);
}else {
returnData = new ReturnBase(99999,"用户登录超时");
}
}else {
returnData = new ReturnBase(99999,"用户token错误");
}
return returnData;
}
以上是关于java token登录令牌的主要内容,如果未能解决你的问题,请参考以下文章
登录令牌JWT一文详解 — JSON WEB TOKEN#yyds干货盘点#
Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段