SpringBoot企业级开发之【用户模块-获取用户详细信息】

发布于:2025-04-11 ⋅ 阅读:(44) ⋅ 点赞:(0)

接口文档的要求:

了解一下token令牌头是怎么用的

我们直接放到前端交互的controller类下,在声明的方法中加入参数为String token且加入注解@RequestHeader(name="Authorization【你自己设定的token】")

设计思路:

实战开发:

controller的开发:

    //查询用户
    @GetMapping("/userInfo")
    //传入token参数
    public Result userInfo(@RequestHeader("Authorization") String token) {
        //解密token
        Map<String,Object> mao=JwtUtil.parseToken(token);
        //得到名字
        String username=(String)mao.get("username");
        //查询信息
        User user=userService.findUserByUsername(username);
        return Result.success(user);
    }

结果:

注意问题1:
 

如果在测试的的时候发现数据中包含了我们不应该返返回的数据,如用户的密码:

解决方案:

在对应的实体类下的对应password字段前加入注解:
@JsonIgnore

作用是让SpringMVC在把当前对象转化成json字符串的时候,忽略password,最终的json字符串中就没有password这个属性了

注意问题2:
 

注意看以上的返回数据中的几个创建时间是“null”,不是因为数据表中没有对应的信息,而是数据表的命名是create_Time,而不是驼峰命名的createTime,两者的命名规则不同,所以获取不到数据。

解决策略:
【在yml文件下加入mybatis的命名规则即可】

mybatis:
  configuration:
    map-underscore-to-camel-case: true  #开启驼峰命名和下划线命名的自动发转换

解析token的问题更进:

咱们在controller中在前面不是注入了token的解析变量么?但是咱们之前在拦截器上已经解析过了,再在controller里去解析的话,只会成为代码累赘,那么我们这期就是来解决这个问题!

TreadLocal:

给了不同线程之间的隔离性,实现你是你的线程,我是我的线程,两者互不干扰。

那么同时有两个线程去执行的话呢,执行效果如下:

开始操作:
 

1.注释controller相关解析token的代码

咱们先把controller内的token解析注释掉

2.导入ThreadLocalUtil工具类
package org.huangyingyuan.utils;

/**
 * ThreadLocal 工具类
 */
@SuppressWarnings("all")
public class ThreadLocalUtil {
    //提供ThreadLocal对象,
    private static final ThreadLocal THREAD_LOCAL = new ThreadLocal();

    //根据键获取值
    public static <T> T get(){
        return (T) THREAD_LOCAL.get();
    }

    //存储键值对
    public static void set(Object value){
        THREAD_LOCAL.set(value);
    }


    //清除ThreadLocal 防止内存泄漏
    public static void remove(){
        THREAD_LOCAL.remove();
    }
}

3.在拦截器内部创建去存我们的一个线程

咱们应该在拦截器内部去创建一个ThreadLocalUtil对象去存我们的一个线程,进行全局调用

注意!清空数据

我们获取到TreadLocalUtil对象后,得到的数据是一次性使用,使用完之后就清空数据,避免内存泄露

重写一个方法【afterCompletion】:

里面调用TreadLocalUtil提供的清楚即可

4.在service中去导入拦截器下的对象

注意点是  “类型是Map对象”

5.测试结果


6.总结一下:

 


网站公告

今日签到

点亮在社区的每一天
去签到