当前位置: 首页 > article >正文

登录-07.JWT令牌-登录后下发令牌

一.思路

我们首先完成令牌生成。

在响应数据这一块

 

该响应数据是一个标准的Result结构,其中"data"的值就是一个JWT令牌。因此我们只需要将生成的JWT令牌封装在Result当中然后返回给前端即可。

备注是给前端看的,不用管。以后我们做校验时,只需要从前端的header中拿到名称为token的值,然后进行校验即可。

二.步骤

package com.gjw.util;

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 = "handsomegaojiaweilovesbeautifulmengxinruloveforever";
    private static Long expire = 4300000L;

    /**
     * 生成Jwt令牌
     */
    public static String generateJwt(Map<String,Object> claims) {


        String jwt = Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, signKey)
                .setClaims(claims)
                .setExpiration(new Date(System.currentTimeMillis() + expire) )
                .compact();
        return jwt;
    }

    /**
     * 解析Jwt令牌
     */
    public static Claims parseJWT(String jwt){
        Claims claims = Jwts.parserBuilder()
                .setSigningKey(signKey)
                .build()
                .parseClaimsJws(jwt)
                .getBody();
        return claims;
    }
}

我们设置过期时间为4300000毫秒。并将JWT令牌工具类引入登录的controller方法。

package com.gjw.controller;

import com.gjw.pojo.Emp;
import com.gjw.pojo.Result;
import com.gjw.service.EmpService;
import com.gjw.util.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;

@Slf4j
@RestController
public class LoginController {

    @Autowired
    private EmpService empService;

    @PostMapping("/login")
    public Result result(@RequestBody  Emp emp) {
        log.info("用户登录:{}",emp);

        Emp e = empService.login(emp);

        //登录成功,生成令牌,下发令牌
        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);
        }
        //登录失败, 返回错误信息
        return Result.error("用户名或密码错误!");
    }
}

首先判断登录用户是否存在,如果不存在,那么就登录失败,返回错误信息。如果找到用户,那么就将该用户的id,name,username的键值对作为claims数据集成到令牌当中,并返回生成的JWT令牌到controller层中。然后将生成的JWT令牌通过Result返回给前端。

登录后我们可以通过查看浏览器的开发者工具中的Response进行JWT令牌的查看

JWT令牌在浏览器的Local Storage中存储。

而当前端再次发起请求时,会将生成的JWT令牌携带过来。


http://www.kler.cn/a/558792.html

相关文章:

  • 【行业解决方案篇十四】【DeepSeek法律科技:合同条款解析引擎】
  • Spring 到 Spring Boot:配置文件管理的灵活封装与扩展
  • 机器学习---KNN算法核心原理和思路分析
  • Flutter: TextEditingValue的实现
  • 链表-基础训练(二)链表 day14
  • 第七期——环形链表2
  • MySQL 如何使用EXPLAIN工具优化SQL
  • devops-Jenkins一键部署多台实例
  • 2025年02月21日Github流行趋势
  • 把 vscode 伪装成 goland
  • MinIO对象存储在Windows中的部署方法
  • go 语言中的线程池
  • 项目8:信用违约预测-集成学习
  • Debian软件包重构
  • PAT甲级 1103 Integer Factorization
  • Android Loader机制解析
  • elf_loader:一个使用Rust编写的ELF加载器
  • RabbitMQ学习—day6—死信队列与延迟队列
  • 网络IP跳动问题解决详
  • flink operator v1.10部署flink v1.19.2