触屏版手机网站,pc下载网,元器件网站搭建,学电子商务好找工作吗接着学习。之前的博客的进度#xff1a;完成用户模块的注册接口的开发以及注册时的参数合法性校验、也基本完成用户模块的登录接口的主逻辑的基础上、JWT令牌的组成与使用以及完成了登录认证#xff08;生成与验证JWT令牌#xff09;具体往回看了解的链接… 接着学习。之前的博客的进度完成用户模块的注册接口的开发以及注册时的参数合法性校验、也基本完成用户模块的登录接口的主逻辑的基础上、JWT令牌的组成与使用以及完成了登录认证生成与验证JWT令牌具体往回看了解的链接如下。 springboot实战学习8(登录接口中使用“JWT令牌“完成登录认证)拦截器的创建与注册-CSDN博客文章浏览阅读525次点赞10次收藏6次。本篇博客主要学习和介绍了如何使用拦截器去实现用户未登录时用户不能访问其它接口除了登录、注册。其中先是进行简单粗暴的每个方法中直接完成JWT令牌的生成与校验。后面改变策略使用拦截器处理所有接口的JWT令牌的生成和校验。所有的测试因为还未完成前端所以都在postman中测试后端的接口查看响应回来的数据......https://blog.csdn.net/m0_74363339/article/details/142463934?spm1001.2014.3001.5501 在已完成开发注册、登录的接口的前提下。这篇博客主要完成获取用户详细信息。 目录 一、明确需求 1部分展示最终需要完成的 二、查看接口文档 1基本的信息请求路径、请求方式、描述 2请求参数无 3响应数据。 三、实现思路 1UserController层 2UserService层 3UserMapper层 四、开始操作 0Result类与JWT令牌工具类 1回到UserController类中 2重启工程。回到postman开始测试。 I测试结果。请求成功 IIpostman中测试时集合(Collections)一下的所有接口都可以统一添加相同请求头。 3问题与解决 .yml配置文件中配置mybatis“开启驼峰命名——下划线命名的自动转换”。 一、明确需求 1部分展示最终需要完成的 当用户登录成功后需要跳转到首页。首页的导航栏这一块需要展示用户的昵称、头像等。像这样的数据都需要访问后台的接口才能获取。在个人中心这部分。有个人基本资料、更新头像、重置密码等等。像这些功能都需要先查询展示然后再进行更新。所以也需要获取用户的详细信息。 二、查看接口文档 1基本的信息请求路径、请求方式、描述 2请求参数无 3响应数据。 响应数据依然是code、message、data。而data对应的object类型的数据。如下面的响应数据样例。它有一个大括号是一个对象。里面有id、username、nickname(昵称)、email、userPic(邮箱地址)、创建和更新时间。 三、实现思路 1UserController层 同样也需要在类UserController里面声明一个方法。方法上边添加注解GetMapping因为现在是一个get请求。指定的映射路径是/userInfo。而且在方法的内部需要根据用户名去查询。注意该用户名是已登录的用户名。注意这个用户名的获取方式虽然这里没有请求参数但是我们所有的接口都要求用户携带token令牌。而且程序在登录时生成的JWT令牌里面存放了用户的id和username。则用户名可以从token中获取。所以要在方法里声明一个参数。名为Authorization的请求头有了token后就可以解析token然后获取到用户名了。 2UserService层 之前已经完成 3UserMapper层 之前已经完成 四、开始操作 0Result类与JWT令牌工具类 package com.feisi.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;//统一响应结果
NoArgsConstructor
AllArgsConstructor
Data
public class ResultT {private Integer code;//业务状态码 0-成功 1-失败private String message;//提示信息private T data;//响应数据//快速返回操作成功响应结果(带响应数据)public static E ResultE success(E data) {return new Result(0, 操作成功, data);}//快速返回操作成功响应结果public static Result success() {return new Result(0, 操作成功, null);}public static Result error(String message) {return new Result(1, message, null);}
} package com.feisi.utils;import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;import java.util.Date;
import java.util.Map;public class JwtUtil {private static final String KEY feisi;//接收业务数据,生成token并返回public static String genToken(MapString, Object claims) {return JWT.create().withClaim(claims, claims).withExpiresAt(new Date(System.currentTimeMillis() 1000 * 60 * 60 * 12)).sign(Algorithm.HMAC256(KEY));}//接收token,验证token,并返回业务数据public static MapString, Object parseToken(String token) {return JWT.require(Algorithm.HMAC256(KEY)).build().verify(token).getClaim(claims).asMap();}}1回到UserController类中 添加一个方法userInfo()。注意返回值类型为ResultUser因为到时侯返回的是User对象。并且添加一个注解GetMapping(/userInfo)。 要得到用户名就在参数列表里面声明一个String类型的token。然后给这个参数加上注解RequestHeader(name Authorization)。 有了token就去解析它。解析token就要使用自己提供的工具类JwtUtil的方法parseToken()。把token传给它它会返回一个业务数据的Map集合。并且用map.get()方法获取指定键的值。因为存的时候是字符串所有强转为String类型的。 GetMapping(/userInfo)public ResultUser userInfo(RequestHeader(name Authorization) String token){//方法内部根据用户名查询用户MapString, Object map JwtUtil.parseToken(token);String username map.get(username).toString();//拿到username就去调用service层的据用户名查询用户方法User user userService.findByName(username);return Result.success(user);} 2重启工程。回到postman开始测试。 I测试结果。请求成功 IIpostman中测试时集合(Collections)一下的所有接口都可以统一添加相同请求头。 因为在postman测试时请求头的参数与值总是每个都要重新写很麻烦。可以直接去集合然后点击Scripts——Pre-request请求前的一个脚本。 在这里写上指定的东西即可。记得写完ctrls保存一下。到时候这个集合下的所有接口请求都会自动的把这个头携带给服务器。所有自己之前写的就不需要携带请求头了。然后当token令牌的时间过期了也能重新登录然后复制粘贴到这里所有的请求就能直接快速用了。 3问题与解决 我们发现请求回来的数据携带了密码。这是不安全的。 这就要用到spring提供的对应的注解去解决这个问题了。添加注解JsonIgnore。作用是springmvc把当前对象转换成json字符串的时候忽略password最终的json字符串中就没有password这个属性了。注意这个注解导的包要是下面这个不然不生效。 import com.fasterxml.jackson.annotation.JsonIgnore; 我们通过上面发现返回的data值里面的email与nickname昵称没有值。是因为在注册的时候只让用户填写用户名与密码。这些是当用户修改个人资料的时候就有值了。这样设置是为了用户能够快速的注册。 可以看到数据库中的表user中字段create_time、update_time的创建时间都有为啥返回的数据data中createTime、updateTime却为null 因为数据库里面的命名是以下划线命名而实体类User中的变量是驼峰命名。这时候mybatis不知道咋去封装数据。 .yml配置文件中配置mybatis“开启驼峰命名——下划线命名的自动转换”。 映射下划线——驼峰命名。 这样mybatis就会发现数据库里面的下划线字段就会去实体类找一个对应的驼峰命名。 重新启动springboot工程。再去postman测试。这时就对了