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后端登录 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java精品项目瑞吉外卖之后端登录功能篇

    目录 一. 登录需求分析 二. 配置返回通用结果类 三. 登录请求API 四. 创建实体类并实现登录逻辑 五. 功能测试 附录 一. 登录需求分析 页面原型 1. 登录页面展示:项目路径(\resources\backend\page\login\login.html) 员工点击登录按钮进行后管平台的登录操作,登录正确以外方式不可登录. 登录处理逻辑 将页面提交的密码进行MD5加密 根据用户名查数据库(查不到返回结果) 比对密码(密码错误返回结果) 查询员工状态,员工状态禁用下不可登录 登录成功

  • Java后端登录实现返回token

    前言 最近工作中需要等待前端进行联调和测试,互联网都知道,当到了联调和提测的时候,基本上的工作都是一阵一阵,中间是有很多空隙时间的,于是为了度过这些空隙时间,写几篇博客,记录一下 处理思路大概是: 登录用户是否存在,不存在,则调用注册插入,存在则获取用户基本信息和token 他的原理,我测试琢磨了一下,大致是这样1.将你输入的 账号.密码.生成时间.你的字符串(盐值-钥匙).失效时间2.像我们平常生成md5一样,走了一个算法,算法的钥匙就是你的唯一字符串3.算法,将账号和密码与生成时间,通过字符

  • Java登录功能实现token生成与验证

    一.token与cookie相比较的优势 1.支持跨域访问,将token置于请求头中,而cookie是不支持跨域访问的: 2.无状态化,服务端无需存储token,只需要验证token信息是否正确即可,而session需要在服务端存储,一般是通过cookie中的sessionID在服务端查找对应的session: 3.无需绑定到一个特殊的身份验证方案(传统的用户名密码登陆),只需要生成的token是符合我们预期设定的即可: 4.更适用于移动端(Android,iOS,小程序等等),像这种原生平台不

  • java后端把数据转换为树,map递归生成json树,返回给前端(后台转换)

    java 后端,把数据转换为树,map递归生成一颗json树,返回给前端(后台转换) 1.为什么要写这样的一篇博客? 2.java 后端代码 3. 转化完的数据在前端格式为类似于: 1.为什么要写这样的一篇博客? 在公司的实习的时候,遇到了一个略坑的东西,就是要医院的科室通过其子父id做成一颗项目树,但是科室的层次有很多,有点甚至到了六层,导致最终选择了优化后的递归算法. 如果在三层或者三层以下,可以考虑使用内部类,超过三层的话,最好就使用递归了,不过记得必须的优化. 2.java 后端代码 代

  • java实现登录案例

    本文实例为大家分享了java实现登录案例的具体代码,供大家参考,具体内容如下 一.环境搭建 JDK1.8  + Tomcat1.8 二.目录结构 三.代码示例 3.1.fail.html页面 <!DOCTYPE html> <html> <head> <title>faill.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,

  • 微信小程序订阅消息(java后端实现)开发

    订阅消息说明 订阅消息是微信近期新出的一个能力,用来代替原有的模板消息(原有的模板消息即将下线) 订阅消息的功能较模板消息有所提升,"7天"的限制取消,同时有"一次性"和"永久"订阅.(功能上是这样说的,但是实际开发时发现"永久"订阅还是对小程序的服务类目有要求的,客户的小程序只支持"一次性"订阅) 官方通道: 小程序前端:点击进入 小程序服务端:点击进入 开发思路 用户在小程序内触发按钮或进行支付操作时前

  • Node登录权限验证token验证实现的方法示例

    1. token的使用场景 无状态请求 保持用户的登录状态 第三方登录(token+auth2.0) 2. 基于token的验证原理 后端不再存储认证信息,而是在用户登录的时候生成一个token,然后返回给前端,前端进行存储,在需要进行验证的时候将token一并发送到后端,后端进行验证 加密的方式:对称加密和非对称加密,对称加密指的是加密解密使用同一个密钥,非对称加密使用公钥和私钥,加密用私钥加密,解密用公钥解密 3. 基于Token的身份验证的过程如下: 客户端:用户名和密码请求登录 服务器:

  • Java后端Tomcat实现WebSocket实例教程

    一.WebSocket简单介绍 WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex).一开始的握手需要借助HTTP请求完成握手. 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,扩展了浏览器与服务端的通信功能,使服务端也能主动向客户端发送数据. WebSocket背景 在浏览器中通过http仅能实现单向的

  • Java 多用户登录限制的实现方法

    最近比较空闲没有项目做,于是乎捋了捋平时工作会遇到的一些常见问题,首先想到了多用户登录限制问题,下面就对此问题做一点思考讲解. 相关阅读: Java Web开发防止多用户重复登录的完美解决方案 1.设计场景 1)同一时刻不允许某个用户多地登录 2)用户已在A处登录,现在从B处登录是允许的,但会把A处挤掉(考虑到用户在A处登录后因某些情况跑到了B处,但还想继续之前的工作,所以需要登录系统) 3)B处挤掉A后,A再做其它操作的时候系统会给出提示,该用户在别处登录,如不是本人操作可能密码泄漏,请修改密

  • Java模拟登录正方教务抓取成绩、课表、空教室

    本文实例为大家分享了Java模拟登录正方教务抓取成绩.课表.空教室等信息,供大家参考,具体内容如下 1.Jwgl.java package com.ican.yueban.jwgl; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import org.apache.http.Ht

随机推荐