登录校验-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令牌。

运行结果如下:

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

相关推荐
咕噜咕噜啦啦19 分钟前
Java期末习题速通
java·开发语言
盐真卿37 分钟前
python2
java·前端·javascript
梦梦代码精1 小时前
BuildingAI vs Dify vs 扣子:三大开源智能体平台架构风格对比
开发语言·前端·数据库·后端·架构·开源·推荐算法
一嘴一个橘子2 小时前
mybatis - 动态语句、批量注册mapper、分页插件
java
组合缺一2 小时前
Json Dom 怎么玩转?
java·json·dom·snack4
REDcker2 小时前
RESTful API设计规范详解
服务器·后端·接口·api·restful·博客·后端开发
危险、2 小时前
一套提升 Spring Boot 项目的高并发、高可用能力的 Cursor 专用提示词
java·spring boot·提示词
kaico20182 小时前
JDK11新特性
java
钊兵2 小时前
java实现GeoJSON地理信息对经纬度点的匹配
java·开发语言
jiayong232 小时前
Tomcat性能优化面试题
java·性能优化·tomcat