首页 > 其他分享 >token的创建和验证

token的创建和验证

时间:2023-04-24 15:48:24浏览次数:29  
标签:username return String 验证 创建 token static public

创建token

public class JWTUtil {
        private static final long EXPIRE_TIME = 3 * 60 * 1000;//默认3分钟
        //私钥
        private static final String TOKEN_SECRET = "privateKey";
    
        public static String createToken(UserEntity userModel) {
            try {
            // 设置过期时间
            Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);
            log.info(String.valueOf(date));
            // 私钥和加密算法
            Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
            // 设置头部信息
            Map<String, Object> header = new HashMap<>(2);
            header.put("Type", "Jwt");
            header.put("alg", "HSA256");
            // 返回token字符串
            return JWT.create()
                .withHeader(header)
                .withClaim("username", userModel.getUsername())
                .withExpiresAt(date)
                .sign(algorithm);
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
        
        /**
        * 检验token是否正确
        *
        * @param **token**
        * @return
        */
        public static boolean verifyToken(String token, String username) {
            log.info("验证token..");
            try {
                Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
                JWTVerifier verifier = JWT.require(algorithm)
                                          .withClaim("username",username).build();
                // 验证不通过会抛出异常。
                verifier.verify(token);
                return true;
            } catch (Exception e) {
                log.info("verifyToken = {}",e.getMessage());
                return false;
            }
        }
    ​
        // 通过withClaim添加在token里面的数据都可以通过这种方式获取
        public static String getUsername(String token){
            DecodedJWT jwt = JWT.decode(token);
            String username = String.valueOf(jwt.getClaim("username"));
            if (StringUtils.hasLength(username)){
                return username;
            }
            return  null;
        }
    }

创建拦截器,拦截请求

@Slf4j
@Component
public class LoginInterceptor implements HandlerInterceptor  {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 当前端是通过在请求里面以 token="xxxx.xxx.zzz"的方式传递时,通过getHeader("token")
        // 的方式获取。
        String token = request.getHeader("token");
        log.info("token = {}",token);
        if (token == null){
            setReturnInfo((HttpServletResponse) response,401,"请携带token");
            return false;
        }
        // 解析token中的数据,JWTUtil.getUsername();
        // 在这里可以通过findUserByUsername的方式从数据源中获取数据
        
        
        // 假定登录用户是super, 并传递给此方法传递参数 
        if ( !JWTUtil.verifyToken(token,"super")){
            setReturnInfo((HttpServletResponse) response,401,"token已过期");
            return false;
        }
        return true;
    }
    
    private static void setReturnInfo(HttpServletResponse httpResponse,int status,String msg) throws IOException {
        log.info("token = null");
        httpResponse.setHeader("Access-Control-Allow-Credentials", "true");
        httpResponse.setHeader("Access-Control-Allow-Origin", "*");
        httpResponse.setCharacterEncoding("UTF-8");
        response.setContentType("application/json;charset=utf-8");
        Map<String,String> result  =new HashMap<>();
        result.put("status",String.valueOf(status));
        result.put("msg",msg);
        httpResponse.getWriter().print(JSONUtils.toJSONString(result));
        
        // 前端可根据返回的status判断

    }
    
}

 

标签:username,return,String,验证,创建,token,static,public
From: https://www.cnblogs.com/qxqbk/p/17349690.html

相关文章

  • web前端pdf.js预览pdf实例创建报错:Array. prototype` contains unexpected enumerable
    使用pdf.min.js是预览pdf文件,但是在实例化时异常报错,下面是实例化的代码varloadingTask=window.pdfjsLib.getDocument(url);console.log(loadingTask);this.pageNum=1;this.pageRendering=false;this.pageNumPending=null;loadingTask.promise.then((pdfDoc_)=>......
  • java token自定义实现
    importcom.example.newsmanager.model.Token;importjavax.servlet.http.Cookie;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassTokenUtil{publicstaticfinalStringTOKEN_NAME="token&......
  • python jwt token使用
    官网https://pyjwt.readthedocs.io/en/latest/index.html#官网https://pyjwt.readthedocs.io/en/latest/index.html#我们在jwt.encode函数中使用了三个参数:#1)第一个是payload,主要用来存放有效的信息,例如用户名,过期时间等想要传递的信息。payload字典内部官方指定有指定ke......
  • 安装VMware tools报Windows无法验证此驱动程序软件的发布者
    问题如下图,如果选择始终安装此驱动程序软件还是无法成功安装 后来发现是虚拟机少了KB4474419补丁,下载这个补丁的镜像文件,将我们下载好的光驱插入到虚拟机中 打开虚拟机,双击打开计算机,打开插入的光驱,找到共享文件夹下的这个补丁包,双击安装进行更新,成功后重启。重启成功进行......
  • Employees、临时表的创建 & 外键约束
    一.Employees1.Employees数据库介绍Employees数据库是一个用于学习和测试的数据库,大约160MB,4百万条记录2.Employees的安装2.1安装[root@MyServertest_db]>mysql-uroot-p<employees.sql2.2验证[root@vm-1employees_db]#timemysql-uroot-p-t<test_employ......
  • OpenAI的子词标记化神器--tiktoken 以及 .NET 支持库SharpToken
    经过Tokenize之后,一串文本就变成了一串整数组成的向量。OpenAI的 Tiktoken 是更高级的Tokenizer,编码效率更高、支持更大的词汇表、计算性能也更高。OpenAI在其官方GitHub上公开了一个开源Python库:tiktoken,这个库主要是用力做字节编码对的。字节编码对(BytePairEncoder......
  • ubuntu创建conda虚拟环境时报错如下:
     ubuntu创建conda虚拟环境时报错如下:Fetchingpackagemetadata...  CondaHTTPError:HTTP000CONNECTIONFAILEDforurl<https://mirrors.tuna.tsinghu  a.edu.cn/anaconda/cloud/msys2/linux-64/repodata.json>  Elapsed:-  AnHTTPerroroccurr......
  • Vue 创建一个Vue项目
    首先,init一个项目D:\javawebPractce\Vue这是我的工程路径创建命令vueinitwebpackhello-vuehello-vue是我的项目名称创建之后,我为了方便,将router自动安装了安装elementUInpmielement-ui-S安装组件npmstall安装sass加载器cnpminstallsass-loadernode-sass--......
  • 如何创建不可变的Map对象
    在Java编程中,创建不可变的Map对象是一项非常重要的任务,这不仅有助于保证程序的线程安全性和安全性,同时还能避免意外的状态变化。本篇博客将详细介绍如何在Java程序中创建不可变的Map对象,以及Java8之前和之后的版本间的差异。什么是不可变类或对象?不可变的类或对象是指在创建后......
  • Django4全栈进阶之路7 createsuperuser创建超级管理员账号
    在Django4中,可以使用createsuperuser命令来创建超级管理员账号。超级管理员拥有管理后台的所有权限,包括创建、编辑和删除用户、组、权限等操作。下面是创建超级管理员账号的步骤: 1、执行以下命令创建超级管理员账号: pythonmanage.pycreatesuperuser2、设置用户信......