utils
jwtUtils.java
package com.shrimpking.util;
import com.alibaba.fastjson.JSON;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.AlgorithmMismatchException;
import com.auth0.jwt.exceptions.InvalidClaimException;
import com.auth0.jwt.exceptions.SignatureVerificationException;
import com.auth0.jwt.exceptions.TokenExpiredException;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.shrimpking.res.Result;
import lombok.extern.slf4j.Slf4j;
import java.util.Calendar;
/**
* Created by IntelliJ IDEA.
*
* @Author : Shrimpking
* @create 2023/11/4 17:24
*/
@Slf4j
public class JwtUtils
{
/**
* 秘钥
*/
private static final String SECRET_KEY = "com.shrimpking";
/**
* 生成token
* @param t
* @param <T>
* @return
*/
public static<T> String getToken(T t){
//定义过期时间,一个月
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH,1);
//
JWTCreator.Builder builder = JWT.create()
//添加声明
.withClaim(t.getClass().getSimpleName(), JSON.toJSONString(t));
//添加过期时间
String token = builder.withExpiresAt(calendar.getTime())
//签名
.sign(Algorithm.HMAC256(SECRET_KEY));
return token;
}
/**
* 用来校验token是否合法
* @param token
* @return
*/
public static Result<DecodedJWT> verifyToken(String token)
{
//错误提示
String errorMsg;
try
{
DecodedJWT verify = JWT.require(Algorithm.HMAC256(SECRET_KEY))
.build().verify(token);
return Result.success(verify);
}
catch (AlgorithmMismatchException e)
{
errorMsg = "算法不匹配";
//System.out.println(e.getMessage());
log.error("发生异常:",e);
}
catch (SignatureVerificationException e)
{
errorMsg = "签名不匹配";
log.error("发生异常:",e);
}
catch (TokenExpiredException e)
{
errorMsg = "令牌失效";
log.error("发生异常:",e);
}
catch (InvalidClaimException e)
{
errorMsg = "声明无效";
log.error("发生异常:",e);
}
catch (Exception e){
errorMsg = "校验令牌失败";
log.error("发生异常:",e);
}
return Result.failure(errorMsg);
}
public static<T> T parse(DecodedJWT decodedJWT, Class<T> clazz)
{
//
Claim claim = decodedJWT.getClaim(clazz.getSimpleName());
if(claim == null){
return null;
}
//return JSON.parseObject(claim.toString(),clazz);
return JSON.parseObject(claim.asString(),clazz);
}
}
responseUtils.java
package com.shrimpking.util;
import com.alibaba.fastjson.JSON;
import com.shrimpking.constants.MyConstants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* Created by IntelliJ IDEA.
*
* @Author : Shrimpking
* @create 2023/11/4 22:49
* 向前端写数据的工具类
*/
@Slf4j
public class ResponseUtils
{
/**
* 向浏览器写入响应数据
* @param response
* @param obj
*/
public static void respAppJson(HttpServletResponse response, Object obj){
//设定文字格式
response.setCharacterEncoding(MyConstants.UTF_8_NAME);
//设定响应类型
response.setContentType(MediaType.APPLICATION_JSON_VALUE);
//获取流
try(PrintWriter writer = response.getWriter())
{
//写入内容
writer.print(JSON.toJSONString(obj));
//立即执行
writer.flush();
}catch (IOException e){
log.error("写到前端异常,",e);
e.printStackTrace();
}
}
}
vo
vopagevo.java
package com.shrimpking.vo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.Data;
import java.util.List;
/**
* Created by IntelliJ IDEA.
*
* @Author : Shrimpking
* @create 2023/9/20 20:54
* 分页前端返回的封装类
*/
@Data
public class PageVO
{
/**
* 当前页
*/
private Long currentPage;
/**
* 总页数
*/
private Long pages;
/**
* 页条数
*/
private Long pageSize;
/**
* 总记录
*/
private Long total;
/**
* 数据
*/
private List content;
/**
* 静态方法,装换包装类
* @param page
* @return
*/
public static PageVO createPageVO(IPage page){
//声明包装类
PageVO pageVO = new PageVO();
//填充数据
pageVO.setCurrentPage(page.getCurrent());
pageVO.setPages(page.getPages());
pageVO.setPageSize(page.getSize());
pageVO.setTotal(page.getTotal());
pageVO.setContent(page.getRecords());
//返回包装类
return pageVO;
}
}
uservo.java
package com.shrimpking.vo;
import com.shrimpking.dto.UserDTO;
import lombok.Data;
import lombok.ToString;
/**
* Created by IntelliJ IDEA.
*
* @Author : Shrimpking
* @create 2023/11/4 17:16
*/
@Data
@ToString(callSuper = true)
public class UserVO extends UserDTO
{
/**
* token
*/
private String token;
}
启动类
package com.shrimpking;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootVueTest29Application
{
public static void main(String[] args)
{
SpringApplication.run(SpringbootVueTest29Application.class, args);
}
}