首页 > 编程知识 正文

java中如何生成token,java生成token令牌

时间:2023-05-04 01:37:44 阅读:147206 作者:3354

以前,单个APP控制登录session就足够了,然后可以在cas中对多客户端进行统一身份验证。 以前也成功配置了cas5.3.9,实现了多客户端单点登录,但很麻烦。 最大的缺点是,cas另有统一认证服务,占用端口,占用内存。 也可以根据同样的原理使用redis等缓存数据库进行共享

JWT是用java编写的,可以生成唯一的token字符串。

通常由令牌类型(JWT )组成,包括Header、Claim、ExpiresAt、sign和Header。 常见的散列算法,如HMAC SHA256和RSA。

例如:

{

' alg': 'HS256 ',

' typ': 'JWT '

}

Header部分中的JSON使用Base64Url编码,形成JWT的第一部分。

Clainm是要加密的StringId,ExpiresAt可以设置过期日期,sign可以自己加密私钥。

JWT.create (

. withheader(header ) )。

. withclaim(userId ),userid ) )。

. withexpiresat (日期)

. sign(algorithm );

通过创建加密的token字符串并将该字符串分发给其他客户端,可以识别是否是同一用户,以及是哪个用户,从而实现单点登录非常简单。

maven下载jar包。 到最新版本发布为止是3.10.2。

com.auth0

java-jwt

3.10.2

创建JWTUtil工厂工具类

package com.zhaohy.app.utils;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

import Java.util.concurrent.executors;

import Java.util.concurrent.scheduledexecutorservice;

import Java.util.concurrent.time unit;

import com.auth0.jwt.JWT;

import com.auth0. jwt.algorithms.algorithm;

import com.auth0. jwt.interfaces.decoded jwt;

import com.auth0. jwt.interfaces.jwt verifier;

公共类jwt util {//过期日期

privatestaticfinallongexpire _ time=15 * 60 * 1000; //默认15分钟

//私钥

私有密钥';

//*

生成签名,15分钟内过期

* @param **username**

* @param **password**

* @return

*/

publicstaticstringcreatetoken (字符串用户id ) {

try {

//设定有效期限

datedate=new date (system.current time millis ) ) EXPIRE_TIME );

//私钥和加密算法

algorithm algorithm=algorithm.hmac 256 (token _ secret );

//设置头部信息

mapheader=newhashmap(2;

header.put('type ',' Jwt ' );

header.put('alg )、' HS256 );

返回token字符串

return JWT.create (

. withheader(header ) )。

. withclaim(userId ),userid ) )。

. withexpiresat (日期)

. sign(algorithm );

}catch(exceptione ) {

e .打印堆栈跟踪(;

返回空值;

}

}

//*

生成token并自定义过期毫秒

* @param **username**

* @param **password**

* @return

*/

publicstaticstringcreatetoken (字符串用户id,long expireDate ) {

try {

//设定有效期限

datedate=new date (system.current time millis ) ) expireDate;

//私钥和加密算法

algorithm algorithm=algorithm.hmac 256 (token _ secret );

//设置头部信息

mapheader=newhashmap(2;

header.put('type ',' Jwt ' );

header.put('alg )、' HS256 );

返回token字符串

return JWT.create (

. withheader(header ) )。

. withclaim(userId ),userid ) )。

. withexpiresat (日期)

. sign(algorithm );

}catch(exceptione ) {

e .打印堆栈跟踪(;

返回空值;

}

}

//*

确保token是正确的

* @param **token**

* @return

*/

publicstaticstringverifytoken (字符串令牌) {

try {

algorithm algorithm=algorithm.hmac 256 (token _ secret );

jtverifierverifier=jwt.require (algorithm ).build );

ecodedjwtjwt=verifier.verify (token );

string userid=jwt.getclaim (' userid ' ).asString );

返回用户id;

}catch(exceptione ) {

返回空值;

}

}

publicstaticvoidmain (字符串[ ] args ) {

string token=jwt util.create token (' zhaohy ',3000 );

system.out.println (' token==' token );

string userid=jwt util.verify token (token );

system.out.println (userid==' userid );

//新的定时任务

Runnable runnable=new Runnable (

//run方法中定时执行的操作

公共void run (}

system.out.println (新日期);

string userid=jwt util.verify token (token );

system.out.println (userid==' userid );

}

(;

scheduledexecutorserviceservice=executors.newsinglethreadscheduledexecutor (;

/*

*参数:命令:运行线程

*参数:初始化延迟:初始化延迟

*参数3:period:2 :两次开始执行的最小间隔时间

*参数四:unit :计时单位

*/

服务. scheduleatfixedrate (runnable,0,4,TimeUnit.SECONDS );

}

}

执行中的main方法:

jwt-main方法输出结果的屏幕捕获

控制台在屏幕快照中打印的效果显示,token已创建、分析,过期后消失,过期有效。 现在,可以在项目中愉快地使用了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。