springboot+vue+mybatisplus项目实战-学生成绩管理系统11

661 篇文章 4 订阅
112 篇文章 0 订阅

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);
    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虾米大王

有你的支持,我会更有动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值