【Java那些事】关于如何使用Jwt令牌的那些事

2024-04-29 00:52
文章标签 java jwt 令牌 使用

本文主要是介绍【Java那些事】关于如何使用Jwt令牌的那些事,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先简单介绍一下吧 ^_~

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用间传递声明的一种基于JSON的轻量级的令牌。

JWT令牌由三部分组成:头部(Header)、载荷(Payload)、签名(Signature)。头部通常包含令牌的类型和使用的加密算法;载荷包含声明(claims),如用户信息、权限等;签名是对头部和载荷的签名,用于验证令牌的真实性和完整性。

JWT令牌的特点包括:

  1. 跨平台:JWT是基于JSON的标准,适用于不同平台和语言。
  2. 自包含:JWT令牌包含了所有用户信息和声明,避免了需要在服务器存储会话信息。
  3. 可验证性:使用签名对JWT进行验证,确保令牌的真实性和完整性。
  4. 非状态性:JWT令牌在服务器端不需要存储状态信息,降低了服务器的负担。

总的来说,JWT令牌提供了一种安全、轻量级的身份验证和授权机制,广泛应用于Web开发中的用户认证和授权过程中。

先创建一个JwtUtil 工具类,来制作Jwt令牌

public class JwtUtil {private static final String KEY = "Java"; //自定义KEY//获得令牌 tokenpublic static String getToken(Map<String, Object> claims){return JWT.create().withClaim("claims", claims).withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 12)).sign(Algorithm.HMAC256(KEY));}//转换token令牌public static Map<String, Object> parseToken(String token) {return JWT.require(Algorithm.HMAC256(KEY)).build().verify(token).getClaim("claims").asMap();}}

在 实现用户登录方法 的时候生成令牌

 @PostMapping("/login")public Result<String> login(String username, String password){String pwd = Md5Util.getMD5String(password);LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(User::getUsername, username);User user = userService.getOne(queryWrapper);if(user == null){return Result.error("该用户不存在");}else {HashMap<String, Object> claims = new HashMap<>();claims.put("id", user.getId());claims.put("username", user.getUsername());String token = JwtUtil.getToken(claims);return Result.success(token);}}

 生成的令牌有什么用呢???【应用于Web开发中的用户认证和授权过程中】

在拦截器这里就能发挥它的作用啦<(* ̄▽ ̄*)/

@Component
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//令牌验证String token = request.getHeader("Authorization");try {Map<String, Object> claims = JwtUtil.parseToken(token);//把业务数据存储到ThreadLocalThreadLocalUtil.set(claims);return true;}catch (Exception e){response.setStatus(401);return false;}}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {//清空数据ThreadLocalUtil.remove();}
}

这篇关于【Java那些事】关于如何使用Jwt令牌的那些事的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/944709

相关文章

spring_hibernate.xml配置文件

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schem

spring boot中数据验证validated的使用

前言 spring-boot中在Controller层里面可以用@validated来校验数据再进入业务逻辑层,如果数据异常则会统一抛出异常,方便异常中心统一处理。 比如,我们判断一个输入的用户名长度限制以及密码的正则验证. 使用流程 1.Controller层数据使用@validated注解 @PostMapping("/userLogin")@ResponseBodypublic

SpringMVC日期参数转换问题Can not deserialize value of type java.util.Date from String 2018-07-19 15:59:34

问题分析 报错日志 Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not deserializevalue of type java.util.Date from Stringto parse Date value '2018-07-19 15:59:34': Can not parse da

Spring Boot构建应用开发规范

1.规范的意义和作用 •编码规范可以最大限度的提高团队开发的合作效率 •编码规范可以尽可能的减少一个软件的维护成本 , 并且几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护 •编码规范可以改善软件的可读性,可以让开发人员尽快而彻底地理解新的代码 •规范性编码还可以让开发人员养成好的编码习惯,甚至锻炼出更加严谨的思维 2.代码仓库规范 2.1公共组件 •公共组件通常指

spring boot 启动FreeMarkerAutoConfiguration报错

问题呈现 搭建好springboot项目后启动,启动过程中出现如下报错: Cannot find template location(s): [classpath:/templates/] (please add some templates, check your FreeMarker configuration, or set spring.freemarker.checkTemplat

Spring集成MyBatis问题: No MyBatis mapper was found in '[xx.xx]' package. Please check your configuration

问题出现情况 在使用SpringBoot集成MyBatis的过程中,项目正常启动异常,控制台打出如下日志: No MyBatis mapper was found in ‘[xx.xxx]’ package. Please check your configuration. Description: A component required a bean of type ‘xx.xxx.

SpringMvc+MyBatis+Shiro整合,shiro的realm不能注入Bean

springMvc+Mybatis和shiro整合,shiro的realm引入Autowire加入接口数据,但是一直无法成功注入,提示问题如下: Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.sxkj.service.inter

Java之责任链模式

一.前言 在公司一般的请假流程中,1天或者以下由组长批准,1-3天的由组长,经理审批,如果是3-7天的由组长,经理,部门领导审批,如果大于7天的则有上级批准。这种模式在设计模式里面的责任链模式可以得到很好的运用,下面用这个该模式实现体会一下责任链模式的好处。 二.定义 定义:将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能处理则处理

Java中Exception与Error的区别

前言 Java 语言在设计之初就提供了相对完善的异常处理机制,这也是 Java 得以大行其道的原因之 一,因为这种机制大大降低了编写和维护可靠程序的门槛。如今,异常处理机制已经成为现代编 程语言的标配。但是Exception与Error有什么区别呢? 区别 ######一.Error 虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。例如,Java虚拟机运行错误(Virtua

JAVA的日志体系

一.前言 目前的日志框架有 jdk 自带的 logging,log4j1、log4j2、logback ,这些框架都自己定制了日志 API ,并且有相应的实现;目前用于实现日志统一的框架 Apache commons-logging、slf4j ,遵循「面向接口编程」的原则,这两大框架可以让用户在程序运行期间去选择具体的日志实现系统(log4j1\log4j2\logback等)来记录日志,是统