在本文中,我们将向您展示在 Java 中创建/生成唯一令牌的几种方法。创建唯一令牌完全取决于使用的参数的逻辑和数量。这是创建唯一令牌的最简单方法。
在此示例中,我们使用了以下组合来生成唯一令牌:
– UUID.randomUUID()
– 返回随机生成的 UUID。
– Instant.now().toEpochMilli()
– 以毫秒为单位返回当前时间戳。
– SecureRandom().nextBytes(*bytes*)
– 生成用户指定数量的随机字节。
– Base64.getUrlEncoder().encodeToString(*bytes*)
– 使用 Base64 编码方案将指定的 字节数组 编码为字符串。
我们可以使用 Supplier
函数接口来获取唯一令牌和 Stream
API 来循环它 10 次。
GenerateToken.java
package org.websparrow;
import java.time.Instant;
import java.util.UUID;
import java.util.function.Supplier;
import java.util.stream.Stream;
public class GenerateToken {
public static void main(String[] args) {
Supplier<String> tokenSupplier = () -> {
StringBuilder token = new StringBuilder();
long currentTimeInMilisecond = Instant.now().toEpochMilli();
return token.append(currentTimeInMilisecond).append("-")
.append(UUID.randomUUID().toString()).toString();
};
Stream.generate(tokenSupplier).limit(10).forEach(System.out::println);
}
}
输出
1591457374665-d5eff25f-b083-41c3-a90d-a89adcc45043
1591457374808-94eec674-de30-4515-97a0-2f8e70f21118
1591457374808-9ce8579f-3531-4c45-952a-63d8c9bfe96d
1591457374808-8efc21a6-b3f7-40fa-a5ad-57b8a9ad6f09
1591457374808-ca2ed5be-d873-4d33-a6d7-ab67949024a7
1591457374808-1f1e3d4b-ff4f-484c-a5b0-2713a0b4450c
1591457374808-d2382fdd-7e90-4ba3-bf7c-be1355464f5b
1591457374808-b4d4d831-bf99-4822-a259-5d557bdcebfd
1591457374808-4d1f0635-a663-432b-aff3-4805e6e0eec5
1591457374808-59cfe84f-034f-44dd-b82a-e5700b7e9fbb
我们还可以使用 SecureRandom
类生成随机字节,并使用 Java 8 Base64 编码器实用程序类将这些字节编码为字符串。
GenerateToken2.java
package org.websparrow;
import java.security.SecureRandom;
import java.util.Base64;
public class GenerateToken2 {
private static final SecureRandom secureRandom = new SecureRandom();
private static final Base64.Encoder base64Encoder = Base64.getUrlEncoder();
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println(getToken());
}
}
public static String getToken() {
byte[] randomBytes = new byte[32];
secureRandom.nextBytes(randomBytes);
return base64Encoder.encodeToString(randomBytes);
}
}
输出
T50-WApPit4rVLNiBuprprIStoldwLosFKgMsZBFoI0=
zB83ukWLeEy7ibMDSxtyjWJ60PXOYwo6l1SU22WCJX8=
gjnqF1fgNIQZ2ACzeCo7vT-op_MSEaAaAdJKvrXhoUo=
EAqUvsn7EF1PCQaTIvwi3moedfKfUygPA7kVfAVtUcI=
w3SQAO6hFm0ZiU7Qtxr0Fr7gg_DEQPcfq0nB8vcKsZE=
E2Uny9Iz-mUDDaUTTTjFnRh1GbUNbTjTwJUsTR1cd7g=
pbl3WmGiAW3z39jPfOOpvqMZGue6TPidqOy_v2V5cG0=
KFifijdPBlTiiZJ0DFry31_HWAn0_CJaiHgntDG6ZrI=
edR0uYppxbxfklHd-hxntsHo9WrR_7Zshgkgh5wk7Mk=
ec7N8NTAY8Z_p-C4_3S82CfJmCTFGMwiUa3oNTyPak4=
如果你的 JDK 版本低于 1.8
,你可以使用 Java 的Evergreen方式。
GenerateToken3.java
package org.websparrow;
import java.time.Instant;
import java.util.UUID;
public class GenerateToken3 {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println(getToken());
}
}
public static String getToken() {
StringBuilder token = new StringBuilder();
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
long currentTimeInMilisecond = timestamp.getTime();
return token.append(currentTimeInMilisecond).append("-")
.append(UUID.randomUUID().toString()).toString();
}
}
输出
1591630301244-cb2b8ec9-ed8f-45fe-95f8-8817889b094e
1591630301405-42aaa902-75d2-4aea-b252-d2eb51ffc571
1591630301405-bb57199b-05df-4795-af29-6a79ab47f881
1591630301406-6df11f73-2d67-4469-a28d-16ded9e56238
1591630301406-96dc312c-53f8-471d-80a6-31cf31d89a57
1591630301406-12ac2ac4-27bd-4db1-81a6-6f4ad575324f
1591630301406-7eaecf07-b3ef-4a0f-bdf8-cdd7186e0d0a
1591630301406-2782462f-980d-464a-bbeb-4eee0fe486d6
1591630301406-43e2dc54-11d6-4aef-a2de-c8558f397130
1591630301406-dc21d1ac-20a8-45ba-8bff-c6ad9501e5f7
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.websparrow.org/java/how-to-create-token-in-java
内容来源于网络,如有侵权,请联系作者删除!