【SpringBoot篇】登录校验 — JWT令牌

这篇具有很好参考价值的文章主要介绍了【SpringBoot篇】登录校验 — JWT令牌。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


【SpringBoot篇】登录校验 — JWT令牌,SpringBoot,spring boot,后端,java

🌹简述JWT令牌

JWT全称为JSON Web Token,是一种用于身份验证的开放标准。它是一个基于JSON格式的安全令牌,主要用于在网络上传输声明或者用户身份信息。JWT通常被用作API的认证方式,以及跨域身份验证。

JWT令牌由三部分组成,分别是头部(Header)、载荷(Payload)和签名(Signature)。头部包含了令牌使用的加密算法信息,载荷包含了所需传输的用户信息,签名用于保证令牌的完整性和真实性,防止令牌被篡改。
【SpringBoot篇】登录校验 — JWT令牌,SpringBoot,spring boot,后端,java
【SpringBoot篇】登录校验 — JWT令牌,SpringBoot,spring boot,后端,java

官网https://jwt.io/

⭐JWT特点

  • 可以跨语言、跨平台使用,因为它是基于JSON标准的。
  • 可以直接嵌入到HTTP请求头中,方便传输和验证。
  • 令牌的有效期可以通过设置过期时间来进行控制,提高了安全性。
  • 由于令牌中包含了用户信息,因此可以避免频繁查询数据库的情况出现,提高了系统的性能。

🌺JWT使用流程

用户向服务器发送登录请求,服务器进行身份验证,如果验证成功则返回一个JWT令牌给客户端。

客户端收到JWT令牌后,将其保存在本地。每次向服务器发送请求时,在请求的头部中携带该令牌,以便服务器对请求进行身份验证。

服务器收到请求后,从请求头中提取JWT令牌,并进行解析和验证。如果令牌有效,则允许请求继续执行;否则返回错误信息。

生成令牌,校验令牌
【SpringBoot篇】登录校验 — JWT令牌,SpringBoot,spring boot,后端,java
在服务端拦截所有的请求,判断算法有合法的jwt请求,如果有,直接放行,否则进行拦截

🛸JWT令牌代码实现

我把代码脚手架传到网盘里面了,大家跟着代码来学习
我用夸克网盘分享了「tlias-web-management」,点击链接即可保存。
链接:https://pan.quark.cn/s/1f4f6c129be8

添加依赖

<!--        JWT令牌-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>

生成JWT令牌

 //生成jwt
    @Test
    public void testGenJwt(){
        Map<String, Object> claims = new HashMap<>();
        claims.put("id",1);
        claims.put("name","Tom");

        String jwt = Jwts.builder()
                .signWith(SignatureAlgorithm.HS512, "itheima")  //签名算法
                .setClaims(claims)   //自定义内容
                                //有参构造方法
                .setExpiration(new Date(System.currentTimeMillis()+3600))  //令牌过期时间
               .compact();
        System.out.println(jwt);

    }

【SpringBoot篇】登录校验 — JWT令牌,SpringBoot,spring boot,后端,java
运行后发现,出现了jwt令牌
【SpringBoot篇】登录校验 — JWT令牌,SpringBoot,spring boot,后端,java
我们把这一段jwt令牌复制粘贴到jwt官网进行解析一下

https://jwt.io/

【SpringBoot篇】登录校验 — JWT令牌,SpringBoot,spring boot,后端,java
解析jwt令牌
(相当于校验令牌,只要解析令牌不报错,就相当于校验jwt令牌正确)

   //解析jwt
    @Test
    public void testParseJwt() {
        Claims claims=Jwts.parser()
                .setSigningKey("itheima")
                //写入你刚才运行出来的jwt令牌
                .parseClaimsJws("eyJhbGciOiJIUzUxMiJ9.eyJuYW1lIjoiVG9tIiwiaWQiOjEsImV4cCI6MTcwMDcyMzQ1M30.GMp1Z-osnaOJ08nM3uswPKRFIaKS4e6_UvZXq2Q4QjYBFRcJNk7WgQRkFJHXIUrZfKovXUZhd8-OOKtXYDyrbg")
                .getBody();
        System.out.println(claims);
    }

【SpringBoot篇】登录校验 — JWT令牌,SpringBoot,spring boot,后端,java
解析出来了
【SpringBoot篇】登录校验 — JWT令牌,SpringBoot,spring boot,后端,java

可能会发生这种报错,是因为jwt令牌过期了,重新生成一个即可
【SpringBoot篇】登录校验 — JWT令牌,SpringBoot,spring boot,后端,java


🍔JWT应用

我们接着上面的代码写,引入jwt工具类

【SpringBoot篇】登录校验 — JWT令牌,SpringBoot,spring boot,后端,java

package com.itheima.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;
    }
}

创建LoginController,里面包含了生成jwt令牌的代码
【SpringBoot篇】登录校验 — JWT令牌,SpringBoot,spring boot,后端,java

package com.itheima.controller;

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

@Slf4j
@RestController
public class LoginController {

    @Autowired
    private EmpService empService;

    @PostMapping("/login")
    public Result login(@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); //jwt包含了当前登录的员工信息
            return Result.success(jwt);
        }

        //登录失败, 返回错误信息
        return Result.error("用户名或密码错误");
    }

}

在技术的道路上,我们不断探索、不断前行,不断面对挑战、不断突破自我。科技的发展改变着世界,而我们作为技术人员,也在这个过程中书写着自己的篇章。让我们携手并进,共同努力,开创美好的未来!愿我们在科技的征途上不断奋进,创造出更加美好、更加智能的明天!

【SpringBoot篇】登录校验 — JWT令牌,SpringBoot,spring boot,后端,java文章来源地址https://www.toymoban.com/news/detail-751775.html

到了这里,关于【SpringBoot篇】登录校验 — JWT令牌的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Spring Boot 优雅集成 Spring Security 5.7(安全框架)与 JWT(双令牌机制)

    Spring Boot 优雅集成 Spring Security 5.7(安全框架)与 JWT(双令牌机制)

    本章节将介绍 Spring Boot 集成 Spring Security 5.7(安全框架)。 🤖 Spring Boot 2.x 实践案例(代码仓库) Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架。 它提供了一组可以在 Spring 应用上下文中配置的 Bean,充分利用了 Spring

    2024年02月12日
    浏览(33)
  • springboot登录校验[JWT]

    springboot登录校验[JWT]

    前言 : 👏作者简介:我是笑霸final,一名热爱技术的在校学生。 📝个人主页:个人主页1 || 笑霸final的主页2 📕系列专栏:后端专栏 📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀 🔥如果感觉博主的文章还不错的话,👍点赞👍 + 👀关注👀 + 🤏

    2023年04月17日
    浏览(9)
  • 微信小程序的授权登录-Java 后端 (Spring boot)

    微信开发文档链接:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html 一个可以测试的微信小程序 此微信小程序的APPID和APPscret(至开发者后台获取) 从时序图我们可以了解到流程大致分为两步: 小程序端获取code后传给Java后台 Java后台获取code后向微信后台接口

    2024年02月09日
    浏览(48)
  • web学习--登录认证--会话技术--cookie--session--令牌--java-jwt使用--jjwt使用

    web学习--登录认证--会话技术--cookie--session--令牌--java-jwt使用--jjwt使用

    前置学习: http springmvc 会话:用户打开浏览器,访问web服务器资源,会话建立,直到有一方断开连接会话结束,一次会话可以多次请求和连接 会话跟踪:一种维护浏览器状态的方式,服务器需要识别多次请求是否来自同一浏览器,以便同一次会话多次请求间共享数据。 cooki

    2024年02月15日
    浏览(30)
  • SpringCloud gateway+Spring Security + JWT实现登录和用户权限校验

    SpringCloud gateway+Spring Security + JWT实现登录和用户权限校验

    原本打算将Security模块与gateway模块分开写的,但想到gateway本来就有过滤的作用 ,于是就把gateway和Security结合在一起了,然后结合JWT令牌对用户身份和权限进行校验。 Spring Cloud的网关与传统的SpringMVC不同,gateway是基于Netty容器,采用的webflux技术,所以gateway模块不能引入spri

    2024年02月03日
    浏览(14)
  • JWT简介& JWT结构& JWT示例& 前端添加JWT令牌功能& 后端程序

    JWT简介& JWT结构& JWT示例& 前端添加JWT令牌功能& 后端程序

    目录 1. JWT简述 1.1 什么是JWT 1.2 为什么使用JWT 1.3 JWT结构 1.4 验证过程 2. JWT示例 2.1 后台程序 2.2 前台加入jwt令牌功能 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录

    2024年04月16日
    浏览(13)
  • Spring boot框架 JWT实现用户账户密码登录验证

    Spring boot框架 JWT实现用户账户密码登录验证

    目录 1、JWT定义 1、1 JWT工作流程 1、2 JWT优点 2、添加依赖项到pom.xml  3、创建用户实体类  4、实现认证服务 5、登录请求处理 6、生成JWT JWT(JSON Web Token)是一种用于在网络应用间传递信息的安全传输方式。它是一种紧凑且自包含的方式,通过使用数字签名来验证数据的完整性

    2024年02月07日
    浏览(12)
  • 在Spring boot中 使用JWT和过滤器实现登录认证

    在Spring boot中 使用JWT和过滤器实现登录认证

    在navicat中运行如下sql,准备一张user表 导入pom.xml坐标 在工utils包下创建一个用于生成和解析JWT 令牌的工具类 在pojo包下创建user类 在mapper包下添加 UserMapper接口 在service包下添加 UserService类 在utils包下添加统一响应结果封装类 在controller包下添加LoginController类 这样登录获取toke

    2024年02月06日
    浏览(12)
  • 【SpringBoot】JWT令牌

    【SpringBoot】JWT令牌

            📝个人主页: 五敷有你         🔥系列专栏: SpringBoot ⛺️稳重求进,晒太阳 JWT简称JSON Web Token,也就是通过JSON形式作为Web应用的令牌,用于各方面之间安全的将信息作为JSON对象传输,在数据传输过程中 1.授权 这是使用JWT的最常见的方案,一旦用户登录,每个

    2024年02月20日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包