SpringBoot+JWT

news/2025/2/23 16:14:53

一、maven坐标

<!-- JWT依赖 -->
		<dependency>
		    <groupId>io.jsonwebtoken</groupId>
		    <artifactId>jjwt</artifactId>
		    <version>0.9.1</version>
		</dependency>
		<dependency>
		    <groupId>com.auth0</groupId>
		    <artifactId>java-jwt</artifactId>
		    <version>4.4.0</version>
		</dependency>

二、配置项
在application.yml文件中添加

config:
  jwt:
    # 加密密钥
    secret: 自己生成
    # token有效时长,单位秒
    expire: 3600

三、配置文件

/**
 * JWT的token,区分大小写
 */
@ConfigurationProperties(prefix = "config.jwt")
@Component
@Setter
@Getter
public class JwtConfig {

	private String secret;
	private long expire;

	/**
	 * 生成token
	 * 
	 * @param subject
	 * @return
	 */
	public String createToken(String subject) {
		Date nowDate = new Date();
		Date expireDate = new Date(nowDate.getTime() + expire * 1000);// 过期时间
		return Jwts.builder().setHeaderParam("typ", "JWT").setSubject(subject).setIssuedAt(nowDate)
				.setExpiration(expireDate).signWith(SignatureAlgorithm.HS512, secret).compact();
	}

	/**
	 * 获取token中注册信息
	 * 
	 * @param token
	 * @return
	 */
	public Claims getTokenClaim(String token) {
		try {
			return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();
		} catch (SignatureException e) {
			e.printStackTrace();
			throw new 自定义异常类("非法请求");
		} catch (ExpiredJwtException e) {
			e.printStackTrace();
			throw new 自定义异常类("登录已过期");
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		}
	}

	/**
	 * 获取subject
	 */
	public String getSubjectFromToken(String token) {
		return getTokenClaim(token).getSubject();
	}

}

四、使用

//需要的地方注入
@Autowired
private JwtConfig jwtConfig;

@ApiOperation("JWT登录")
@GetMapping("loginJWT")
public ResponseBo loginJWT(HttpServletRequest request, String phone) {
	//返回TOKEN用于其他系统认证,不一定一定要传phone,按自己需求修改
	String jwtToken = jwtConfig.createToken(phone);
	return ResponseBo.success().data(jwtToken);
}

@ApiOperation("验证")
@GetMapping("getInfo")
public ResponseBo getInfo(HttpServletRequest request){
	//我这里让前端放入header里面传给我,可以按照需求修改
	String token = request.getHeader("token");
	String phone = jwtConfig.getSubjectFromToken(token);
	return ResponseBo.success().data(phone);
}

http://www.niftyadmin.cn/n/4924506.html

相关文章

vite项目中使用@代表根路径

1.配置vite.config.ts import { defineConfig } from vite import vue from vitejs/plugin-vue import path from pathexport default defineConfig({plugins: [vue()],resolve: {alias:{: path.resolve(__dirname, src) }} })2.报错path和__dirname 找不到模块“path”或其相…

一文解决JWT相同签名不匹配问题【JWT signature does not match locally computed signature.】

今天做项目的时候&#xff0c;涉及到一个支付记账的功能&#xff0c;想着不能将这些金额数据显示暴露的通过常规的请求体封装来进行传输&#xff0c;想着要是被中途抓包修改了不就麻烦了&#xff0c;所以考虑到这种安全性的需求&#xff0c;就利用上了JWT来进行数据的封装传递&…

激活函数总结(一):ReLU及其变体

激活函数总结&#xff08;一&#xff09; 1 引言2 常用激活函数介绍2.1 Sigmoid激活函数2.2 Tanh激活函数2.3 ReLU激活函数2.4 Leaky ReLU激活函数2.5 Parametric ReLU&#xff08;PReLU&#xff09;激活函数2.6 Swish激活函数 3. 总结 总结的激活函数都在目录中有所展示&#…

@MapperScan 和 @Mapper 源码解读

一.从开发中遇到的问题开始 问题描述 : 在一个springbootmybatis的项目中,在dao也就是Mapper接口上配置了Mapper注解&#xff0c;其他同事在启动类还配置了MapperScan注解&#xff08;包扫描没有配全面&#xff09;&#xff0c;进行批量指定所生成的Mapper接口动态代理接口类&a…

wsl(在windows中使用呢linux系统)适用于windows的linux子系统

步骤可参考微软官方文档https://learn.microsoft.com/zh-cn/windows/wsl/install-manual#step-4—download-the-linux-kernel-update-package 在这里主要列举一些需要注意的点 wsl2的要求 一定要检查下windows版本&#xff0c;版本不对的先升级版本不然无法使用wsl2 wsl支持…

MyBatis和MyBatis-plus配置多数据源和操作多数据库

一&#xff0c;学习MyBatis和MyBatis-plus&#xff1a; mybatis:官网文档:mybatis – MyBatis 3 | 简介 mybatis-plus:官网文档&#xff1a;MyBatis-Plus 二&#xff0c;MyBatis来实现多数据源的查询&#xff1a; 配置文件的格式&#xff1a; spring:datasource: db1:driv…

APT80DQ40BG-ASEMI快恢复二极管APT80DQ40BG

编辑&#xff1a;ll APT80DQ40BG-ASEMI快恢复二极管APT80DQ40BG 型号&#xff1a;APT60DQ20BG 品牌&#xff1a;ASEMI 封装&#xff1a;TO-3P 恢复时间&#xff1a;≤50ns 正向电流&#xff1a;80A 反向耐压&#xff1a;400V 芯片个数&#xff1a;双芯片 引脚数量&…

计算机视觉应用方向

计算机视觉可以大致有以下几个方向&#xff08;更详细的可以参考papers with code&#xff09;&#xff1a; 图像分类目标检测图像分割图像生成风格迁移超分辨率 1. 图像分类 图像分类是是视觉识别中的一项基本任务&#xff0c;目的是分辨整个图像并将其分类。 1.1 常用数据…