SpringBoot6-10(黑马)

JWT令牌

简介:

1.JWT全称:JSON Web Token(https://iwt.io/)

定义了一种简洁的、自包含的格式,用于通信双方以json数据格式安全的传输信息。

2.组成:

>第一部分:Header(头),记录令牌类型、签名算法等。例如:("alg":"HS256","type":"JWT")

>第二部分:Payload(有效载荷),携带一些自定义信息、默认信息等。例如:{"id":"1","username":"Tom")

>第三部分:Signature(签名),防止Token被篡改、确保安全性。将header、payload,并加入指定秘钥,通过指定签名算法计算而来。

注:Base64:是一种基于64个可打印字符(A-Z a-z 0-9 +/)来表示二进制数据的编码方式。

认证登录

需要使用JwtUtil这个工具类

UserController

java 复制代码
//    登录
    @PostMapping("/login")
    public Result<String> login(@Pattern(regexp = "^\\S{5,16}$") String username, @Pattern(regexp = "^\\S{5,16}$")String password) {
        // 根据用户名查询用户
        User loginUser = userService.findByUserName(username);
        //判断该用户是否存在
        if (loginUser == null) {
            return Result.error("用户名错误");
        }

        //判断密码是否正确     loginUser对象中的password是密文
        if (Md5Util.getMD5String(password).equals(loginUser.getPassword())) {
            //登陆成功
            Map<String,Object> claims = new HashMap<>();
            claims.put("id",loginUser.getId());
            claims.put("username",loginUser.getUsername());
            String token = JwtUtil.genToken(claims);
            return Result.success(token);
        }
        return Result.error("密码错误");
    }

ArticleController

java 复制代码
package com.rzl.controller;
import com.rzl.pojo.Result;
import com.rzl.utils.JwtUtil;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@RestController
@RequestMapping("/article")
public class ArticleController {
    @GetMapping("list")
    public Result<String> list(@RequestHeader(name = "Authorization") String token, HttpServletResponse response) {
//验证token
        try {
            Map<String,Object> claims = JwtUtil.parseToken(token);
            return Result.success("所有的文章数据...");
        } catch (Exception e) {
//            http响应状态码为401
            response.setStatus(401);
           return Result.error("未登录");
        }


     }




}

使用postman

获取用户详细信息

User

java 复制代码
package com.rzl.pojo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Integer id;//主键ID
    private String username;//用户名
    @JsonIgnore   //让springmvc把当前对象转换为json字符串时,忽略password,最终的json字符串中就没有password这个属性
    private String password;//密码
    private String nickname;//昵称
    private String email;//邮箱
    private String userPic;//用户头像地址
    private LocalDateTime createTime;//创建时间
    private LocalDateTime updateTime;//更新时间
}
复制代码
application.yml中添加如下代码
java 复制代码
#  驼峰命名和下划线命名的自动转换
mybatis:
  configuration:
    map-underscore-to-camel-case: true

UserController:

java 复制代码
    @GetMapping("/userInfo")
    public Result<User> getUserInfo(@RequestHeader(name = "Authorization") String token) {
//        根据用户名查询用户
        Map<String, Object> map = JwtUtil.parseToken(token);
       String username = (String) map.get("username");

       User user = userService.findByUserName(username);
       return Result.success(user);


    }
}

使用postman

相关推荐
OpenTiny社区8 小时前
TinySearchBox 综合搜索组件重磅更新:实现 Vue 2 和 Vue 3 双版本适配!
前端·javascript·vue.js
Studying 开龙wu8 小时前
Linux 系统中apt-get 和 pip命令有什么区别
linux·运维·pip
GDAL8 小时前
HTML 实现登录状态记录 深入全面讲解教程
前端·html·登录验证
(づど)8 小时前
一套齐全的环境设置:nvm\node\nrm\pnpm
前端·笔记
OliverH-yishuihan8 小时前
下载、安装和设置 Linux 工作负载
linux·运维·服务器
晷龙烬8 小时前
Vue 3 自定义指令:从“瑞士军刀”到“专属工具” !
前端·javascript·vue.js
MediaTea8 小时前
思考与练习(第四章 程序组成与输入输出)
java·linux·服务器·前端·javascript
BD_Marathon8 小时前
【JavaWeb】NPM_简介和相关配置
前端·npm·node.js
松涛和鸣8 小时前
35、Linux IPC进阶:信号与System V共享内存
linux·运维·服务器·数据库·算法·list
咸鱼加辣8 小时前
【前端框架】react
前端·react.js·前端框架