vs2010做网站教程,wordpress超级密码,网络销售怎么找客源,沂源网站设计文章目录 Spring Boot 集成JWT实现Token验证详解一、引言二、JWT和Token基础1、什么是Token2、什么是JWT3、JWT的结构4、JWT的工作原理 三、集成JWT1、引入JWT依赖2、创建Token工具类3、创建拦截器4、注册拦截器 四、总结 Spring Boot 集成JWT实现Token验证详解
一、引言
在现… 文章目录 Spring Boot 集成JWT实现Token验证详解一、引言二、JWT和Token基础1、什么是Token2、什么是JWT3、JWT的结构4、JWT的工作原理 三、集成JWT1、引入JWT依赖2、创建Token工具类3、创建拦截器4、注册拦截器 四、总结 Spring Boot 集成JWT实现Token验证详解
一、引言
在现代Web应用开发中随着前后端分离和微服务架构的流行传统的基于Cookie和Session的身份验证方式已经逐渐被基于Token的验证方式所取代。JWTJson Web Tokens作为一种轻量级的身份验证机制因其简单、安全且易于使用的特性而广受欢迎。本文将详细介绍什么是JWT什么是Token以及如何在Spring Boot项目中集成JWT来实现Token验证。
二、JWT和Token基础
1、什么是Token
Token是一种令牌它在用户登录后由服务器生成并返回给客户端客户端在随后的请求中将Token附在HTTP请求头中以此来验证用户的身份。Token通常包含了用户的身份信息和一些其他的元数据。
2、什么是JWT
JWTJson Web Tokens是一个开放标准RFC 7519它定义了一种紧凑且自包含的方式用于在双方之间以JSON对象的形式安全地传输信息。每个Token都是经过数字签名的因此可以被验证和信任。JWT可以使用秘密对称加密或使用RSA或ECDSA的公钥/私钥对非对称加密进行签名。
3、JWT的结构
JWT由三部分组成用点.分隔
Header头部通常包含Token的类型即JWT和所使用的签名算法如HMAC SHA256或RSA。Payload负载包含所要传递的信息。负载可以包含多个声明Claims声明是关于实体通常是用户和其他数据的声明。Signature签名用于验证消息在传输过程中未被篡改并且对于使用私钥签名的Token还可以验证发送者的身份。
4、JWT的工作原理
用户使用用户名和密码登录。服务器验证用户的凭据并创建一个包含用户信息和其他需要的数据的JWT。服务器将JWT发送给客户端。客户端在随后的每个请求中将JWT放在HTTP请求头中发送给服务器。服务器验证JWT的有效性如果有效则允许用户访问资源。 三、集成JWT
1、引入JWT依赖
在Spring Boot项目的pom.xml文件中引入JWT依赖。
dependencygroupIdcom.auth0/groupIdartifactIdjava-jwt/artifactIdversion3.10.3/version
/dependency
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId
/dependency2、创建Token工具类
创建一个工具类TokenUtil用于生成和验证JWT Token。
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.auth0.jwt.interfaces.JWTVerifier;import java.util.Date;
import java.util.HashMap;
import java.util.Map;Component
public class TokenUtil {private static final String SECRET your-secret; // 密钥生产环境应保持安全public String createToken(String username) {try {Date expireDate new Date(System.currentTimeMillis() 3600 * 1000); // 设置Token过期时间return JWT.create().withIssuer(auth0).withClaim(username, username).withExpiresAt(expireDate).sign(Algorithm.HMAC256(SECRET));} catch (Exception exception) {throw new RuntimeException(Token创建失败);}}public MapString, String verifyToken(String token) {try {JWTVerifier verifier JWT.require(Algorithm.HMAC256(SECRET)).withIssuer(auth0).build();DecodedJWT jwt verifier.verify(token);return jwt.getClaims();} catch (JWTVerificationException exception) {throw new RuntimeException(Token验证失败);}}
}3、创建拦截器
创建一个拦截器TokenInterceptor用于在请求中验证Token。
import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;Component
public class TokenInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String token request.getHeader(Authorization);if (token ! null !token.isEmpty()) {TokenUtil tokenUtil new TokenUtil();MapString, String claims tokenUtil.verifyToken(token);if (claims ! null) {return true;}}response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);response.getWriter().write(Unauthorized);return false;}
}4、注册拦截器
将拦截器注册到Spring Boot中。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;Configuration
public class WebConfig implements WebMvcConfigurer {Autowiredprivate TokenInterceptor tokenInterceptor;Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(tokenInterceptor).addPathPatterns(/**).excludePathPatterns(/login, /public/**);}
}四、总结
通过上述步骤我们已经在Spring Boot项目中成功集成了JWT实现了Token的生成和验证。这种基于Token的身份验证机制不仅适用于单体应用也适用于微服务架构为现代Web应用提供了一种灵活、安全的身份验证解决方案。希望本文能帮助你更好地理解和实现JWT Token验证。 版权声明本博客内容为原创转载请保留原文链接及作者信息。
参考文章
CSDN博客 - springboot整合token腾讯云开发者社区 - Spring Boot 如何集成JWT实现Token验证