token 简单理解就是 加密 解密的一个过程

JavaWebToken(加密解密工具)
public class JavaWebToken {

    private static Logger log = LoggerFactory.getLogger(JavaWebToken.class);

    //该方法使用HS256算法和Secret:bankgl生成signKey    private static Key getKeyInstance() {        //We will sign our JavaWebToken with our ApiKey secret        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;        byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("bankgl");        Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());        return signingKey;    }

    //使用HS256签名算法和生成的signingKey最终的Token,claims中是有效载荷 public static String createJavaWebToken(Map<String, Object> claims) { return Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS256, getKeyInstance()).compact(); }

 //解析Token,同时也能验证Token,当验证失败返回null public static Map<String, Object> parserJavaWebToken(String jwt) { try { Map<String, Object> jwtClaims = Jwts.parser().setSigningKey(getKeyInstance()).parseClaimsJws(jwt).getBody(); return jwtClaims; } catch (Exception e) { log.error("json web token verify failed"); return null; } }}
JavaWebInterceptor(拦截器)
public class JavaWebInterceptor implements HandlerInterceptor {    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {        response.setContentType("multipart/form-data");        response.setCharacterEncoding("UTF-8");        response.setContentType("text/html");        PrintWriter printwriter = new PrintWriter(response.getOutputStream());        String token = request.getParameter("token");        response.setHeader("token", token);        printwriter.println("token:" + token);        if (null != JavaWebToken.parserJavaWebToken(token)) {            Map<String, Object> tokenMapVal = JavaWebToken.parserJavaWebToken(token);//解析token            for (String key : tokenMapVal.keySet()) {                String value = (String) tokenMapVal.get(key);                printwriter.println("解析的内容:(key:" + key + " value:" + value + ")");            }            String endTime=tokenMapVal.get("times").toString();            long currentTime=System.currentTimeMillis();            printwriter.println("当前时间"+currentTime);            printwriter.println("结束时间"+endTime);            if(Long.valueOf(endTime).longValue()<=currentTime){                printwriter.println("token失效,请重新获取token"); printwriter.flush(); printwriter.close(); return false; } if (tokenMapVal.get("passwd").equals("123456")){ printwriter.println("登陆验证成功"); }else{ printwriter.println("登陆验证失败"); } printwriter.flush(); printwriter.close(); return true; } else { printwriter.println("没有token信息"); printwriter.flush(); printwriter.close(); return false; }

 }

 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

 }

 @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

 }}spring-mv.xml(配置拦截器)
<mvc:interceptor>   <mvc:mapping path="/hello/ai"/>   <bean class="com.sun.test.aircraft.token.JavaWebInterceptor"/></mvc:interceptor>
controller(请求数据)
@RequestMapping("/token")public String token(Model model, HttpServletRequest request, HttpServletResponse response){    Map<String,Object> map=new HashMap<String,Object>();    map.put("passwd","123456");//负载    map.put("times","1000");//负载    String token=JavaWebToken.createJavaWebToken(map);//创建token    model.addAttribute("token",token);    return "redirect:/hello/ai";}引入的jar 包:
<dependency>    <groupId>com.auth0</groupId>    <artifactId>java-jwt</artifactId>    <version>3.1.0</version></dependency><dependency>    <groupId>io.jsonwebtoken</groupId>    <artifactId>jjwt</artifactId>    <version>0.6.0</version></dependency>
效果:

做的完善功能远不止这一点比如:1、用户登陆成功后生成的token放到数据库中,每次登陆的时候拿token对比2、把token放到头信息里3、在负载中加入token的有效时间(也可利用redis的ttl设置有效时间,方式很多种),token失效后重新获取,重新存入数据库(比如:redis,mongodb)中 等
如果看官有认为我理解的错误的地方,可以留下你的评论,我好改正,感谢!
 

转载于:https://www.cnblogs.com/austinspark-jessylu/p/8043391.html

token 案例,只是测试,功能并不完善(只是看看token 到底是何方神圣)相关推荐

  1. 【学习日记2023.5.8】之 springboot案例之登录功能(会话技术_JWT令牌_过滤器_拦截器)

    文章目录 1. 案例-登录认证 1. 1登录功能 1.1.1 需求 1.1.2 接口文档 1.1.3 思路分析 1.1.4 功能开发 1.1.5 测试 1.1.6 全后端联调 1.2 登录校验 1.2 ...

  2. VS 2010 测试功能学习(七) - RnP与Coded UI自动化测试

      题外话:昨天去上海浦东机场接闺女, 一切还是蛮顺利的,公交机场7线直接从上海火车南站一站直达浦东机场,票价20元,算上乘坐地铁5号和1号线的6元,从我家到机场总共要26元,相对于打 的士的220元 ...

  3. 头条案例登录注册功能

    1.准备 #1.1 创建组件并配置路由 1.创建 src/views/login/index.vue 并写入以下内容 <template><div class="login ...

  4. 接口练习:猫狗案例扩展跳高功能

    在"抽象类练习1:猫狗案例"的基础上,猫狗案例加入额外功能:跳高jump() 注意分析:是有的猫会跳高,有的狗会跳高 所以定义一个跳高接口.再定义两个类:跳高猫,继承猫,实现猫的跳 ...

  5. Idea自带http测试功能真香

    Idea自带http测试功能真香 前言 图像界面 命令 Get请求 post请求 认证请求 测试响应 前言 在工作中接触的大多数项目都采用前后端分离方式,常用postman免费版来进行api接口测试. ...

  6. 华为鸿蒙OS手机尝鲜,鸿蒙OS开启消费者尝鲜计划!大批华为手机可用,功能接近完善...

    原标题:鸿蒙OS开启消费者尝鲜计划!大批华为手机可用,功能接近完善 近日,原华为EMUI官微就正式宣布更名为Harmony OS,而且华为也官方宣布将在6月2日晚20点召开鸿蒙操作系统及华为全场景新品 ...

  7. 案例分享| T-Box功能自动化测试方案

    背景 T-Box是实现汽车车联网的一个关键环节,从起初单纯的实现车辆信息采集,已发展到具有车辆信息监测及信息交互(V2X).车辆远程控制.安全监测和报警.远程诊断.边缘计算等多种离线和在线的应用功能的 ...

  8. Fluke OTDR新增SmartLoop双向测试功能

    通信仪表公司Fluke网络日前为其OptiFiber Pro OTDR产品增加SmartLoop双向测试功能,从而可以支持在一端同时测试双向两根光纤的故障. SmartLoop双向测试功能基于Fluk ...

  9. python操作三大主流数据库(6)python操作mysql⑥新闻管理后台功能的完善(增、ajax异步删除新闻、改、查)...

    python操作mysql⑥新闻管理后台功能的完善(增.删.改.查) 安装表单验证 D:\python\python_mysql_redis_mongodb\version02>pip inst ...

最新文章

  1. mysql开启慢查询日志
  2. php写web服务器端,如何用php实现一个web服务器
  3. 访问进程环境变量environ时的一个坑
  4. js时间工具 MyTimeUtil.js
  5. Shell脚本之sed的使用
  6. react学习(48)--编辑回显用moment处理
  7. linux驱动的中断函数,嵌入式Linux驱动开发(四)——字符设备驱动之中断方式以及中断方式获取按键值...
  8. go - struct
  9. 【网站集合】【Windows】程序员常用网站一览
  10. 查找算法-跳跃表(SkipList)入门及复杂度分析
  11. Vue开发警告[Vue warn]: Avoid replacing instance root $data. Use nested data properties instead.
  12. 二叉树的镜像和对称二叉树
  13. 软件设计师---计算机系统
  14. 现代信号处理——平稳随机信号的功率谱密度
  15. JavaScript 无法获取响应 header 的 Content-Disposition 字段
  16. code.aliyun.com拉取提交代码认证失败
  17. 祝学校计算机系的新年贺词,新年祝福语:学校新年贺词祝福短信
  18. 2021-05-23:打开Office后界面上显示一个横幅提示:你的许可证不是正版,并且你可能是盗版软件的受害者
  19. TCP协议为什么是三次握手而不是两次
  20. idea2018.3 无需注册码破解,完美使用100年

热门文章

  1. 征战蓝桥 —— 2016年第七届 —— C/C++A组第7题——剪邮票
  2. 大数据WEB阶段(十八)数据库事务
  3. VS2017简单用法
  4. 【Linux】一步一步学Linux——chkconfig命令(148)
  5. 【Ubuntu】 Ubuntu16.04搭建Samba服务
  6. 每天一道LeetCode-----生成由[1 : n]这n个数组成的所有二叉搜索树
  7. 和java通信_[源码和文档分享]基于JAVA的即时通信软件
  8. 记录k8s下配置ssl安全连接版rabbitmq
  9. python中items属性的用法
  10. mysql8.0.15调优_Mysql 8.0 参数调优