Java实现Token的生成与验证
二、基于JWT的token认证实现
JWT:JSON Web Token,其实token就是一段字符串,由三部分组成:Header,Payload,Signature
1、引入依赖
<dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.8.2</version>
</dependency>
2、设置密钥和生存时间
//设置过期时间private static final long EXPIRE_TIME = 240 * 60 * 1000;//token秘钥private static final String TOKEN_SECRET = "f26e587c28064d0e855e72c0a6a0e618";
3、实现签名方法
public static String sign(String username, String permission) {String token = "";try {//过期时间Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);//秘钥及加密算法Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);//设置头部信息Map<String, Object> header = new HashMap<>(2);header.put("typ", "JWT");header.put("alg", "HS256");//携带username,password信息,生成签名return JWT.create().withHeader(header).withClaim("loginName", username).withClaim("permission", permission).withExpiresAt(date).sign(algorithm);} catch (Exception e) {e.printStackTrace();return null;}}
4、验证token
public static boolean verify(String token){/*** @desc 验证token,通过返回true* @params [token]需要校验的串**/try {Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);JWTVerifier verifier = JWT.require(algorithm).build();DecodedJWT jwt = verifier.verify(token);return true;}catch (Exception e){e.printStackTrace();return false;}}public static String parseJWT(String token){/*** @desc 解密token,返回一个map* @params [token]需要校验的串**/DecodedJWT decodeToken = JWT.decode(token);return decodeToken.getClaim("loginName").asString();}public static boolean isJwtExpired(String token){/*** @desc 判断token是否过期* @author lj*/try {DecodedJWT decodeToken = JWT.decode(token);return decodeToken.getExpiresAt().before(new Date());} catch(Exception e){return true;}}}
5、token解码
public static String parseJWT(String token){/*** @desc 解密token,返回一个map* @params [token]需要校验的串**/DecodedJWT decodeToken = JWT.decode(token);return decodeToken.getClaim("loginName").asString();}
6、判断token是否过期
public static boolean isJwtExpired(String token){/*** @desc 判断token是否过期* @author lj*/try {DecodedJWT decodeToken = JWT.decode(token);return decodeToken.getExpiresAt().before(new Date());} catch(Exception e){return true;}}}
7、测试
public static void main(String[] args) {String username ="zhangsan";String password = "123";String token = token(username,password);System.out.println(token);boolean b = verify(token);System.out.println(b);}
三、完整的Token工具类代码
public class JwtUtil {//设置过期时间private static final long EXPIRE_TIME = 240 * 60 * 1000;//token秘钥private static final String TOKEN_SECRET = "f26e587c28064d0e855e72c0a6a0e618";public static String sign(String username, String permission) {String token = "";try {//过期时间Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);//秘钥及加密算法Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);//设置头部信息Map<String, Object> header = new HashMap<>(2);header.put("typ", "JWT");header.put("alg", "HS256");//携带username,password信息,生成签名return JWT.create().withHeader(header).withClaim("loginName", username).withClaim("permission", permission).withExpiresAt(date).sign(algorithm);} catch (Exception e) {e.printStackTrace();return null;}}public static boolean verify(String token){/*** @desc 验证token,通过返回true* @params [token]需要校验的串**/try {Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);JWTVerifier verifier = JWT.require(algorithm).build();DecodedJWT jwt = verifier.verify(token);return true;}catch (Exception e){e.printStackTrace();return false;}}public static String parseJWT(String token){/*** @desc 解密token,返回一个map* @params [token]需要校验的串**/DecodedJWT decodeToken = JWT.decode(token);return decodeToken.getClaim("loginName").asString();}public static boolean isJwtExpired(String token){/*** @desc 判断token是否过期* @author lj*/try {DecodedJWT decodeToken = JWT.decode(token);return decodeToken.getExpiresAt().before(new Date());} catch(Exception e){return true;}}}
Java实现Token的生成与验证相关推荐
- java token生成和验证_Java Token登录验证 生成解析Token
借鉴参考 Java Token登录验证 使用jjwt生成和解析JWT java基于token验证之登陆验证 等 什么是Token? 我的理解来说 token就是你访问服务器的口令,只要token合法, ...
- Java实现Token登录验证(基于JWT的token认证实现)
文章目录 一.JWT是什么? 二.使用步骤 1.项目结构 2.相关依赖 3.数据库 4.相关代码 三.测试结果 一.JWT是什么? 在介绍JWT之前,我们先来回顾一下利用token进行用户身份验证的流 ...
- 【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程...
上篇文章介绍了基于Ids4密码授权模式,从使用场景.原理分析.自定义帐户体系集成完整的介绍了密码授权模式的内容,并最后给出了三个思考问题,本篇就针对第一个思考问题详细的讲解下Ids4是如何生成acce ...
- [微信]微信JS-SDK权限签名生成及验证
目录 一.获取access_token 二.获取jsapi_ticket 三.拼接参数,SHA-1加密获取签名 四.验证签名 在使用微信的分享.图片等众多功能时,通常需要在config接口注入权限验证 ...
- Java Web Token 之 JJWT 使用
文章目录 Java Web Token 之 JJWT 使用 1. JJWT 简介 2. JJWT 引入 2.1 Maven依赖 3. 快速入门 3.1 构建 JWT 3.2 解析 JWT 4. JWT ...
- java基于token的认证,Java实现基于token认证
随着互联网的不断发展,技术的迭代也非常之快.我们的用户认证也从刚开始的用户名密码转变到基于cookie的session认证,然而到了今天,这种认证已经不能满足与我们的业务需求了(分布式,微服务).我们 ...
- php token的生成和使用
原文连接:http://ukagaka.github.io/php/2018/05/08/JWT.html 1. 为什么要使用tokent进行登录 前后端分离或者为了支持多个web应用,那么原来的co ...
- jwt 私钥_JSON Web Token (JWT)生成Token及解密实战。
昨天讲解了JWT的介绍.应用场景.优点及注意事项等,今天来个JWT具体的使用实践吧. 从JWT官网支持的类库来看,jjwt是Java支持的算法中最全的,推荐使用,网址如下. 下面来看看如何使用jjwt ...
- JSON Web Token (JWT)生成Token及解密实战
转载自 JSON Web Token (JWT)生成Token及解密实战 昨天讲解了JWT的介绍.应用场景.优点及注意事项等,今天来个JWT具体的使用实践吧. 从JWT官网支持的类库来看,jjwt是J ...
最新文章
- java一个参数 多个值_Spring里有类似@RequestParam的办法去绑定一个多值参数吧
- Oracle11.2新特性之listagg函数 (行列转换)
- 如何查看linux系统服务器磁盘大小和文件占用情况
- (转)让你受益终身的10个Word实用技巧
- python二维游戏示例_Python实现的井字棋(Tic Tac Toe)游戏示例
- ASP.NET Core之跨平台的实时性能监控
- OpenShift上的无痛集装箱化JBoss通用贷款处理
- html选中列表整列变色,excel选中行变色完整代码和动画效果
- backward理解
- PAT乙级(1031 查验身份证)
- NumPy Beginner's Guide 2e 带注释源码 二、NumPy 基础入门
- 苹果任命软件主管凯文•林奇为“苹果汽车”项目负责人
- c常用算法程序集_10万赞的AI算法集:含python,java,C,C++多种语言
- 串灯控制盒去掉怎么接_仿木地板瓷砖怎么样?仿木地板瓷砖怎么铺?
- mysql模糊匹配关键字_MySQL 关键字模糊匹配,并按照匹配度排序
- jsp+ssm+mysql实现图书馆预约占座管理系统 代码+数据库脚本+论文+答辩稿+开题报告+任务书
- linux window manager,Window manager (简体中文)
- 一个遮罩层怎么遮罩两个图层_遮罩动画只能有两个图层,上面为“遮罩层”,下面为“被遮罩”层。...
- Docker网络模式与资源控制管理
- 基于VUE的SSR技术-姜威-专题视频课程
热门文章
- 使用Footprint Expert PRO 制作AD封装
- python需要掌握的词汇量_【Python】测词汇量小工具
- 原生JS实现特效导航条
- 本地配置httpd服务
- 对nvidia optimus黑屏与背光调节问题的一点总结
- 武汉大学计算机博士导师 王丽娜,武汉大学计算机学院博士生导师简介:陈晶...
- 用户画像、物品画像【画像就是刻画物品或用户的特征;本质上就是给用户或物品贴标签】
- HandsFree ROS IMU
- 零基础CSS入门教程(31)–代码格式化
- 教你如何免费获取0.1米高精度卫星地图