Java后端登录实现返回token

 更新时间:2022年07月07日 10:55:34   作者:我要用代码向我喜欢的女孩表白  
本文主要介绍了Java后端登录实现返回token,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

最近工作中需要等待前端进行联调和测试,互联网都知道,当到了联调和提测的时候,基本上的工作都是一阵一阵,中间是有很多空隙时间的,于是为了度过这些空隙时间,写几篇博客,记录一下

处理思路大概是: 登录用户是否存在,不存在,则调用注册插入,存在则获取用户基本信息和token

他的原理,我测试琢磨了一下,大致是这样
1.将你输入的 账号、密码、生成时间、你的字符串(盐值-钥匙)、失效时间
2.像我们平常生成md5一样,走了一个算法,算法的钥匙就是你的唯一字符串
3.算法,将账号和密码与生成时间,通过字符串,进行加密,生成一批字符串,这个就是token

当你要验证token的时候,他的原理大致就是这样
1.你把token传过去,他通过你的钥匙字符串,解密,解密出来的东西是否符合他的规则【他会把解密的东西,变成一个含特定字段的json数据,如果不符合,那么就解密不出来json,就会报错,就是以json字符串这个特点,去做的规则判断】,不符合,则直接报错,解析错误,然后,获取了其中的时间,当然他也可以获取账号和密码,然后获取当前时间,与你的存储时间,相减,是否超过失效时间,如果是,则提示过期。

理论上来说,我拿到了这个用户的token,我就能以token访问这个用户的任何服务,所以token才要设定过期时间。另外就算是过期token,不能在进行登录,但是token中的信息还是照样可以获取的。
所以token中,不要学文中的测试案例,一样存敏感的信息(如密码等)

这里我们采用jwt依赖生成token

        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>3.8.2</version>
        </dependency>

生成token

package com.example.etf.story.service;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
 * @desc   使用token验证用户是否登录
 * @author zm
 **/
public class TokenUtils {
    //设置过期时间
    private static final long EXPIRE_DATE=1000*60*5; //1分钟
    //token秘钥
    private static final String TOKEN_SECRET = "ZCfasfhuaUUHufguGuwu2020BQWf";

    public static String token (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信息,生成签名
            token = JWT.create()
                    .withHeader(header)
                    .withClaim("username",username)
                    .withClaim("password",password).withExpiresAt(date)
                    .sign(algorithm);

        }catch (Exception e){
            e.printStackTrace();
            return  null;
        }
        return token;
    }

    public static boolean verify(String token){
        /**
         * @desc   验证token,通过返回true
         * @params [token]需要校验的串
         **/
        try {
            Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
            JWTVerifier verifier = JWT.require(algorithm).build();

            DecodedJWT jwt = verifier.verify(token);
            return true;
        }catch (Exception e){
            System.out.println("校验失败");
            return  false;
        }
    }
    public static void main(String[] args) {
        String username ="zhangsan";
        String password = "123";
        String token = token(username,password);
        System.out.println(token);
        boolean b = verify("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXNzd29yZCI6IjEyMyIsImV4cCI6MTY1NzA5ODE4MCwidXNlcm5hbWUiOiJ6aGFuZ3NhbiJ9.W-IgXJmNBrboXlzT_PtPkTavYhgRn9ZwkVpJoJLU6ks");
        Claim username1 = JWT.decode("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXNzd29yZCI6IjEyMyIsImV4cCI6MTY1NzA5ODE4MCwidXNlcm5hbWUiOiJ6aGFuZ3NhbiJ9.W-IgXJmNBrboXlzT_PtPkTavYhgRn9ZwkVpJoJLU6k1").getClaim("username");
        System.out.println("我是从token中获取的信息"+username1.asString());

        System.out.println(b);
    }
}

到此这篇关于Java后端登录实现返回token的文章就介绍到这了,更多相关Java后端登录 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Java设计模式之桥接模式

    详解Java设计模式之桥接模式

    桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯。桥接模式将系统的抽象部分与实现部分分离解耦,使他们可以独立的变化。本文通过示例详细介绍了桥接模式的原理与使用,需要的可以参考一下
    2022-06-06
  • java自定义动态链接数据库示例

    java自定义动态链接数据库示例

    这篇文章主要介绍了java自定义动态链接数据库示例,需要的朋友可以参考下
    2014-02-02
  • java中重写父类方法加不加@Override详解

    java中重写父类方法加不加@Override详解

    这篇文章主要介绍了java中重写父类方法加不加@Override详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Spring Bean注册与注入实现方法详解

    Spring Bean注册与注入实现方法详解

    首先,要学习Spring中的Bean的注入方式,就要先了解什么是依赖注入。依赖注入是指:让调用类对某一接口的实现类的实现类的依赖关系由第三方注入,以此来消除调用类对某一接口实现类的依赖。Spring容器中支持的依赖注入方式主要有属性注入、构造函数注入、工厂方法注入
    2022-10-10
  • java的各种类型转换全部汇总(推荐)

    java的各种类型转换全部汇总(推荐)

    下面小编就为大家带来一篇java的各种类型转换全部汇总(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • 基于JAVA中的四种JSON解析方式详解

    基于JAVA中的四种JSON解析方式详解

    这篇文章主要介绍了基于JAVA中的四种JSON解析方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • java读取txt文件内容简单举例

    java读取txt文件内容简单举例

    这篇文章主要给大家介绍了关于java读取txt文件内容简单举例的相关资料,通常我们可以直接通过文件流来读取txt文件的内容,文中给出了详细的代码示例,需要的朋友可以参考下
    2023-07-07
  • Java多线程之Interrupt中断线程详解

    Java多线程之Interrupt中断线程详解

    Interrupt 的其作用是"中断"线程, 但实际上线程仍会继续运行, 这是一个非常容易混淆的概念. Interrupt 的真正作用是给线程对象设置一个中断标记, 并不会影响线程的正常运行,需要的朋友可以参考下
    2021-05-05
  • java中url任意跳转漏洞的解决

    java中url任意跳转漏洞的解决

    URL任意跳转漏洞是一种安全漏洞,它发生在应用程序没有正确地验证目标URL,允许攻击者将用户重定向到恶意网站,本文就来介绍一下漏洞的解决修复方案,感兴趣的可以了解一下
    2024-06-06
  • 高分面试从Hotspot源码层面剖析java多态实现原理

    高分面试从Hotspot源码层面剖析java多态实现原理

    这篇文章主要为大家介绍了在面试中从Hotspot源码层面来剖析java多态的实现原理,这样回答薪资随你开,有需要的朋友可以借鉴参考下,希望大家多多加薪
    2022-01-01

最新评论