登录校验-JWT令牌-登陆后下发令牌

目录

思路

接口文档

令牌生成和下发

步骤

具体代码如下

工具类

控制类

测试

前后端联调


思路

  • 令牌生成:登陆成功后,生成JWT令牌,并返回给前端
  • 令牌校验:在请求到达服务端后,对令牌进行统一拦截、校验

接口文档

接口文档的链接如下:

https://hkm-web.oss-cn-beijing.aliyuncs.com/%E6%8E%A5%E5%8F%A3%E6%96%87%E6%A1%A3https://hkm-web.oss-cn-beijing.aliyuncs.com/%E6%8E%A5%E5%8F%A3%E6%96%87%E6%A1%A3从浏览器发送请求至服务端进行登录请求的功能接口已经实现,接下来需要进行实现的功能接口就是校验访问的用户是否登录成功,即需要完成用户登录成功后为其下发JWT令牌,并在其下一次登陆时进行令牌的校验。

令牌生成和下发

步骤

  • 引入JWT令牌操作的工具类
  • 登录完成后,调用工具类生成JWT令牌,并返回给前端

具体代码如下

工具类

java 复制代码
package com.example.tlias.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.Map;

public class JwtUtils {

    private static String signKey = "itheima";
    private static Long expire = 43200000L;

    /**
     * 生成JWT令牌
     *
     * @param claims JWT第二部分负载 payload 中存储的内容
     * @return
     */
    public static String generateJwt(Map<String, Object> claims) {
        String jwt = Jwts.builder()
                .addClaims(claims)
                .signWith(SignatureAlgorithm.HS256, signKey)
                .setExpiration(new Date(System.currentTimeMillis() + expire))
                .compact();
        return jwt;
    }

    /**
     * 解析JWT令牌
     *
     * @param jwt JWT令牌
     * @return JWT第二部分负载 payload 中存储的内容
     */
    public static Claims parseJWT(String jwt) {
        Claims claims = Jwts.parser()
                .setSigningKey(signKey)
                .parseClaimsJws(jwt)
                .getBody();
        return claims;
    }
}

控制类

java 复制代码
package com.example.tlias.controller;

import com.example.tlias.pojo.Emp;
import com.example.tlias.pojo.Result;
import com.example.tlias.service.EmpService;
import com.example.tlias.utils.JwtUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
@Slf4j
public class LoginController {
    @Autowired
    private EmpService empService;

    @PostMapping("/login")

    public Result Login(@RequestBody Emp emp) {
        log.info("员工登录:{}", emp);
        Emp e = empService.Login(emp);
        // todo 登录成功,生成并下发令牌
        if (e != null) {

            Map<String, Object> claims = new HashMap<>();
            // 获取员工信息
            claims.put("id", e.getId());
            claims.put("name", e.getName());
            claims.put("username", e.getUsername());
            // 生成令牌并添加自定义信息
            String jwt = JwtUtils.generateJwt(claims);
            // 返回令牌信息至前端
            return Result.success(jwt);
        }
        // todo 登陆失败,返回错误信息
        return Result.error("用户名或密码错误");
    }
}

测试

  • 使用postman进行测试,具体全球路径及请求参数如下

  • 登录成功

  • 登陆失败

前后端联调

Nginx文件:https://hkm-web.oss-cn-beijing.aliyuncs.com/Nginx

在接口文档中已经说明用户登录成功后,系统会自动下发JWT令牌,然后在后续的每次请求中,都需要在请求头header中携带到服务端,请求头的名称为 token ,值为 登录时下发的 JWT令牌。

运行结果如下:

在登陆界面登录成功过后,访问部门页面

相关推荐
计算机学姐25 分钟前
基于大数据的学生体质健康信息系统
大数据·vue.js·spring boot·mysql·数据分析·intellij-idea·数据可视化
qq_3653206026 分钟前
IDEA几大常用AI插件
java·人工智能·intellij-idea
何中应1 小时前
tk.mapper框架使用
java·数据库·后端
li.wz1 小时前
RocketMQTemplate 解析:简化与 RocketMQ 消息系统的交互
java·rocketmq
计算机学姐2 小时前
基于大数据的二手电子产品需求分析及可视化系统
java·大数据·vue.js·spring boot·mysql·需求分析·数据可视化
m0_571957582 小时前
Java | Leetcode Java题解之第441题排列硬币
java·leetcode·题解
2402_857589362 小时前
Spring Boot框架下房屋租赁系统的最佳实践
java·数据库·spring boot
哎呦没2 小时前
小徐影院:Spring Boot技术下的影院革新
java·spring boot·后端
PleaSure乐事2 小时前
【AndroidStudio】关于AndroidStudio的常见控件TextView和Button
java·学习·android studio·安卓·移动应用开发
Hundred billion3 小时前
【牛客刷题记录】【JAVA】二分查找
java·开发语言