首页 > 编程语言 >Java登陆第四十四天——跟写微头条遇到的问题

Java登陆第四十四天——跟写微头条遇到的问题

时间:2024-04-25 22:22:40浏览次数:20  
标签:map Java HashMap 第四十四 token result null realUser 头条

微头条项目链接

作为JavaWeb的收官之作,这里记载了写项目时遇到的问题。

前提:使用maven进行依赖管理

1.JJWT导入依赖太少

最初只导入了

<dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-api</artifactId>
            <version>0.11.5</version>
        </dependency>

出现异常Have you remembered to include the jjwt-impl.jar in your runtime classpath?
于是上网搜索,还需要额外导入以下两个依赖

        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-impl</artifactId>
            <version>0.11.5</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-jackson</artifactId>
            <version>0.11.5</version>
        </dependency>

2. JJWT密钥太短

异常The signing key's size is 32 bits which is not secure enough for the HS512 algorithm.
jwt 0.9.1 之后的版本对于密钥安全性要求更高(体现在 secret 密钥的长度要达到一定的位数)。

于是修改代码

JwtUtil类

   private static long tokenExpiration = 24 * 60 * 60 * 1000;
//private static String tokenSignKey = "123456" 加密太短了 随便加点
    private static String tokenSignKey = "dsiofayasdiufyiouqweyhruio2q3yo512435y3hpsaiafhp9uisrdoufiosduriou1io23u4i1o2u3io1p2u3ipoudsiopfuipaosdpufpioau1231242141";

3.代码优化

这是我写的

    protected void getUserInfo(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求头
        String token = req.getHeader("token");
        //根据token解密后的uid查询用户
        NewsUser realUser = userService.findByUserId(JwtUtil.getUserId(token));
        Result result = null;
        //用户存在
        if (realUser != null) {
            HashMap<String, Object> map = new HashMap<>();
            //密码不返回
            realUser.setUserPwd("");
            map.put("loginUser", realUser);
            result = Result.ok(map);
        }
        WebUtil.writeJson(resp, result);
    }

没有检验token直接就去操作数据库,会加大数据库的压力,也会导致无效的查询。

修改代码

    protected void getUserInfo(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求头
        String token = req.getHeader("token");
        Result result = null;

        //使用短路与 第一个布尔表达式不成立直接就F了
        //isExpiration判断是否失效,T是失效,F是有效,所以取反
        if (token != null && (!JwtUtil.isExpiration(token)) ) {
            //根据token解密后的uid查询用户
            NewsUser realUser = userService.findByUserId(JwtUtil.getUserId(token));
            //用户存在
            if (realUser != null) {
                HashMap<String, Object> map = new HashMap<>();
                //密码不返回
                realUser.setUserPwd("");
                map.put("loginUser", realUser);
                result = Result.ok(map);
            }
        }
        WebUtil.writeJson(resp, result);
    }

标签:map,Java,HashMap,第四十四,token,result,null,realUser,头条
From: https://www.cnblogs.com/rowbed/p/18158747

相关文章

  • 【vue3入门】-【3】使用javascript表达式
    使用javascript表达式每个绑定仅支持单一表达式,也就是一段能够被求值的JavaScript代码。一个简单的判断方法是是否可以合法的写在return后面。<template><h3>模版语法</h3><p>{{msg}}</p><p>{{number+1}}</p><p>{{ok?"yes":"No"}}</......
  • 招聘java 然后进去写.net ?
    这刚好金三银四嘛,最近社区呢,经常出现这种讨论。很多企业招聘java然后进去实际做项目写.net,这说明.net平台的人很少嘛,java的人很多,目前阶段.net8一点都不比java差,甚至还比java更好!目前很多国外在对比java和.net的时候,已经得出一些结论,甚至在性能上更比java好,可以去找找这方......
  • JAVA程序连接es(Elasticsearch)会出现长时间不请求,突然请求会连接超时的问题
       可以使用这个方法试试设置长时间保持策略 伪代码 /***配置长连接保持策略**@return*/publicConnectionKeepAliveStrategyconnectionKeepAliveStrategy(){return(response,context)->{//Honor'keep......
  • java3
    三元运算符:publicstaticvoidmain(String[]args){intp1=150;intp2=210;intp3=165;intmax=p1>p2?p1:p2;intmax2=max>p3?max:p3;System.out.println(max2);if判断语句:Scannersc=newScanner(System.in);System.out.......
  • 深入解析JavaScript的块级作用域和for循环的性能考量
    "当然,以下是一篇关于JavaScript中块级作用域和循环的深入分析的博客文章草稿:深入解析JavaScript的块级作用域和for循环的性能考量块级作用域的基本理解在JavaScript中,块级作用域是由大括号{}定义的作用域,限定了变量的可见性和生命周期。通常情况下,如if、try...catch以及with等......
  • JAVA安全学习 Day 1
    JAVAClassLoader机制谈起JAVA就不得不谈起他的基本类的加载机制谈一下我的粗略理解:我一开始也不理解为什么学习java安全要从一个classloader讲起,似乎有点太基层了,但是学到后面的cc链,才有了更明显的理解,因为只有深入理解了java的classloader机制才会在后面构造cc链的时候不会......
  • Java ---- 阻塞队列 Blocking Queue
    阻塞队列(BlockingQueue)是一种特殊类型的队列,用于多线程环境中,实现进程通信;常见的Java阻塞队列包括:(1)ArrayBlockingQueue(有界队列)内部是采用数组存储元素的,初始化需要指定容器大小,ArrayBlockingQueue可以用于实现数据缓存、限流、生产者-消费者模式等各种应用。在队列的......
  • javascript高级编程系列 - 使用XMLHttpRequest发送请求
    XMLHttpRequest通过XMLHttpRequest发送get请求//创建XMLHttpRequest实例对象constxhr=newXMLHttpRequest();//监听通信状态xhr.onreadystatechange=function(){//请求结束,处理服务器返回的数据if(xhr.readyState===4){//http状态码为200表示成功......
  • JavaScript基本语法
    JavaScript基本语法变量变量是用于存放数据的容器,我们通过变量名获取数据,甚至数据可以修改。变量本质是程序在内存中申请的一块用来存放数据的空间。变量的使用变量在使用时分为两步:1.声明变量2.赋值变量的声明varname;声明一个变量,没有初始化var是一个JS关键字,用......
  • JavaScript简介
    JavaScript简介JavaScript是什么JavaScipt是运行在客户端(浏览器)上的一种编程语言(脚本语言)注:脚本语言:不需要编译,运行过程中由js解释器逐行解释并且执行现在也可以基于node.js技术进行服务器编程浏览器分成两部分∶渲染引擎和JS引擎渲染引擎︰用来解析HTML与CSS,俗称内核,比......