Token实现登录、token过期解决以及数据解析

这篇具有很好参考价值的文章主要介绍了Token实现登录、token过期解决以及数据解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是token?

        token我们可以理解为一个令牌,主要的作用是守护我们系统的安全,像我们登录这些都是可以使用token进行用户数据校验的,那么为什么不用传统的session呢?主要还是session是前端页面生成给我们的,当某一个窗口关闭了以后或者session发生了变化那么在请求服务就歇菜了,session的主动权在与前端,而token的主动权者在于服务端。

那么我们如何实现呢?看下面的代码吧!

<!--导入下面依赖吧-->
<dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>3.3.0</version>
</dependency>

生成token

    //设置过期时间(毫秒为单位)
    private static final long EXPIRE_DATE=1*60*1000;
    //token秘钥(可以自定义一个随机字符串就行,避免中文)
    private static final String TOKEN_SECRET = "ZCEQIUBFKSJBFJH2020BQWE";

    /**
     * 
     * @param username  传入用户名
     * @param password  传入密码
     * @return
     */
    @GetMapping("/getToken")
    public String getToken(String username, String password) {
        String token = "";
        try {
            //过期时间
            Date date = new Date(System.currentTimeMillis() + EXPIRE_DATE);
            //秘钥及加密算法
            Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
            //设置头部信息
            Map<String, Object> header = new HashMap<>();
            header.put("typ", "JWT");
            header.put("alg", "HS256");
            //携带username,password和用户ID信息,生成签名,按照需求而定
            token = JWT.create()
                    .withHeader(header)
                    .withClaim("username", username).withClaim("userId", 用户id)
                    .withClaim("password", password).withExpiresAt(date)
                    .sign(algorithm);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return token;
    }

校验token是否过期

  /**
     * 校验Token是否过期
     * @param token
     * @return
     */
    public static boolean verifyToken(String token){
        try {
            Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
            JWTVerifier verifier = JWT.require(algorithm).build();
            verifier.verify(token);
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return  false;
        }
    }

解析token信息

   /**
     * 解析Token
     * @param key     需要解析的key字符串(username、userId等等,就是携带数据生成token的Key)
     * @param token   传入token
     * @return
     */
    public static String getUsername(String token,String key){
        try {
            DecodedJWT jwt = JWT.decode(token);
            return jwt.getClaim(key).asString();
        }catch (JWTDecodeException e){
            e.printStackTrace();
        }
        return null;
    }

可能很多人直接使用上面的代码进行登录接口实现了,那么同志们有想过一个问题吗?上面设置了token的过期时间的,当用户正在使用我们软件的时候,突然token过期了直接报了个401,这个时候用户肯定是一脸懵逼了,有很多软件都会出现这个问题,就是因为偷懒了,我们不经常发现是因为他们的token设置的过期时间较长而已。我下面给大家提供了解决方案。

1、后台可以在生成token返回给前端的时候缓存一下token,比如我们token过期时间是30分钟,那么我们缓存有效期就设置10分钟就行了,前端每次请求都刷新我们的缓存,如果前端10分钟都没有请求的话我们的token就自动过期了,如果我们的缓存token没过期但是实际token过期了怎么办呢?这个时候我们就可以直接生成一个新的token返回给前端。

2、生成token的时候生成两个token返回给前端(假如生成了A和B两个token)A的Token返回给前端用作数据交互,B的Token用来刷新A的Token,这个时候我们就可以将B设置过期时间长一点,当后台发现A过期的话返回401给前端,前端在使用B来换取新的token,我们后台收到换取token通知的时候将原来A里面的数据解析出来重新使用数据生成一个新的token返回给前端。

温馨提示一下 : 我们在生成token的时候需要注意要防止别人去里面解析数据,最好对token进行数据的加密处理。比如有的同学使用账号密码生成token,这种方法要特别注意。文章来源地址https://www.toymoban.com/news/detail-401314.html

到了这里,关于Token实现登录、token过期解决以及数据解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 小程序token过期后, 实现无感知的刷新token

    当我们使用在小程序中做用户登录的时候, 后台给用户一个token, 小程序端用本地缓存token ,以后每次请求的时候,带上这个token 发起请求, 后端解析token中的数据, 查看是否有过期,或其它的错误, 如果正常的话, 后端是可以从这个token中 确认这个请求是哪一个用户发送过

    2024年02月11日
    浏览(37)
  • 基于NodeJs+Express+MySQL 实现实现登录注册接口+token生成与解析验证+跨域-CORS

    目录 一、express是什么? 二、安装 express 三、安装Mysql 四、安装 nodemon 实现项目热更新 五、这里先了解下express的post get delete接口 post接口说明: get接口说明 :  DELETE 接口 六、注册功能 1、流程分析 校验表单数据是否合法 检测用户名是否占用 密码加密处理 插入新用户 2、

    2024年02月11日
    浏览(38)
  • 【SpringCloud Gateway】SpringCloud各微服务之间用户登录信息共享的实现思路——gateway网关token校验以及向微服务发送请求携带token

            最近在学习SpringCloud项目时,想到了一些问题,各个微服务分别部署在不同的服务上,由naocs作为注册中心实现负载均衡,彼此之间通过Feign相互调用通信,信息同步并不像单体项目那样方便,传统单体项目的登录验证方式似乎在SpringCloud中不能满足项目的需求。那么

    2024年02月05日
    浏览(37)
  • 关于 Token 过期问题的两种解决方案

     对于token过期,我们有两种方案:   方案一:当我们操作某个需要token作为请求头的接口时,返回的数据错误error.response.status === 401,说明我们的token已经过期了。 我们希望当响应返回的数据是401身份过期时,让当前浏览页面强行跳转到登入页面,让用户 手动更新token。拿到

    2024年01月17日
    浏览(30)
  • K8s Token 过期解决方案(Kubeadm)

    Token 是 Node 节点用来连接 Master 节点的令牌字串,它和 CA 证书的 Hash 值是把一台 Node 节点加入到 K8s 集群时使用的凭证。如下图所示: 在 K8s 1.8 之后,默认生成的 Token 有效期只有 24 小时,过期后 Token 将不可用,如果想新的 Node 节点加入 K8s 集群,则需重新生成新的 Token。生

    2024年02月13日
    浏览(27)
  • sa-token多端登陆实现,PC,APP登陆分别设置token过期时间

    Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。 Sa-Token 目前主要五大功能模块:登录认证、权限认证、单点登录、OAuth2.0、微服务鉴权。 登录认证 —— 单端登录、多端

    2024年02月08日
    浏览(33)
  • 【JWT】SpringBoot+微信小程序根据指定参数生成Token、更新Token、判断Token是否已经过期、封装wx.request请求更新Token并判断Token是否过期

    微信小程序js代码 微信小程序点击登录按钮调用该方法 java后端代码 getUserCode方法为获取用户的唯一标识openId userLogin方法用于用户授权登录并获取Token userLogin实现类方法 封装了wx的request请求,每次发起请求的时候都走一遍更新Token的接口/user/updateTokenTime,如果接口返回offlin

    2024年02月04日
    浏览(39)
  • token和JWT token区别、登录安全、页面权限、数据权限、单点登录

     直接区别: token需要查库验证token 是否有效,而JWT不用查库或者少查库,直接在服务端进行校验,并且不用查库。因为用户的信息及加密信息在第二部分payload和第三部分签证中已经生成,只要在服务端进行校验就行,并且校验也是JWT自己实现的。     JWT是json web token缩写。

    2023年04月09日
    浏览(37)
  • 前端刷新token,判断token是否过期(jwt鉴权)

    4.1 什么是 JWT JWT 是 Auth0 提出的通过 对 JSON 进行加密签名来实现授权验证的方案; 就是登录成功后将相关用户信息组成 JSON 对象,然后对这个对象进行某种方式的加密,返回给客户端; 客户端在下次请求时带上这个 Token; 服务端再收到请求时校验 token 合法性,其实也就是在

    2024年02月03日
    浏览(40)
  • 登录业务实现 - token登录鉴权

     登录业务实现: 登录成功/失败实现  -  pinia管理用户数据及数据持久化  -  不同登录状态的模板适配   -  请求拦截器携带token( 登录鉴权 )   -  退出登录实现  -  token失效(401响应拦截)   当 表单校验通过 时, 封装登录接口,调用登录接口 ,分别处理 登录成功和

    2024年02月07日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包