JwtUtils-JWT令牌工具类
作用
本工具类主要提供JWT令牌的生成和校验功能,本类提供的方法均为静态方法,可以直接调用。
本工具类主要用于网关和项目的全局拦截器中签发、校验、获取令牌用,在项目中通常在需要获取令牌内信息的地方调用get方法获取令牌内的参数即可。
请注意,只要配合润典网关服务使用,所有能进入服务的请求,都可以使用本工具类直接获取用户信息,可确保所有用户信息都是可用的。
API列表
/**
* 验证JWT令牌是否有效的方法
* 该方法从token中解析出商户ID和用户名再加上密钥进行校验
*
* @param token 密钥
* @param secret 令牌的密钥
* @return 返回校验结果(true:验证通过,false:验证不通过)
*/
public static boolean verify(@NonNull String token, @NonNull String secret) {
// to do sth.
}
/**
* 验证JWT令牌是否有效的方法
*
* @param token 密钥
* @param username 用户名
* @param secret 令牌的密钥
* @return 返回校验结果(true:验证通过,false:验证不通过)
*/
public static boolean verify(@NonNull String token, @NonNull String username, @NonNull String secret) {
// to do sth.
}
/**
* 验证JWT令牌是否有效的方法
*
* @param token 密钥
* @param tenantCode 租户ID
* @param username 用户名
* @param secret 令牌的密钥
* @return 返回校验结果(true:验证通过,false:验证不通过)
*/
public static boolean verify(@NonNull String token, @NonNull String tenantCode, @NonNull String username, @NonNull String secret) {
// to do sth.
}
/**
* 验证JWT令牌是否有效的方法
*
* @param token 密钥
* @param tenantCode 租户ID
* @param username 用户名
* @param params 自定义扩展参数
* @param secret 令牌的密钥
* @return 返回校验结果(true:验证通过,false:验证不通过)
*/
public static boolean verify(@NonNull String token, @NonNull String tenantCode, @NonNull String username, Map<String, String> params, @NonNull String secret) {
// to do sth.
}
/**
* 获得token中其他参数的方法
* (注:如果令牌无效则返回null)
*
* @param token JWT令牌
* @param key Token中参数的KEY
* @return 返回用户名(如果获取不到则返回空)
*/
public static String getArgument(@NonNull String token, @NonNull String key) {
// to do sth.
}
/**
* 获得token中其他参数的方法
* (注:如果令牌无效则返回null)
*
* @param token JWT令牌
* @return 返回用户名(如果获取不到则返回空)
*/
public static Date getExpiredTime(@NonNull String token) {
// to do sth.
}
/**
* 获得token中用户名的方法
* (注:如果令牌无效则返回null)
*
* @param token JWT令牌
* @return 返回用户名(如果获取不到则返回空)
*/
@Nullable
public static String getUsername(@NonNull String token) {
// to do sth.
}
/**
* 获得token中租户ID的方法
* (注:如果令牌无效则返回null)
*
* @param token JWT令牌
* @return 返回租户ID(如果获取不到则返回空)
*/
@Nullable
public static String getTenantCode(@NonNull String token) {
// to do sth.
}
/**
* 获取用户信息缓存Key的方法
*
* @param token JWT令牌
* @return 返回用户信息缓存Key(如果获取不到则返回空)
*/
@Nullable
public static String getUserKey(@NonNull String token) {
// to do sth.
}
/**
* 获得token中租户账号到期时间的方法
* (注:如果令牌无效或当前未启用租户功能则返回null)
*
* @param token JWT令牌
* @return 返回租户ID(如果获取不到则返回空)
*/
@Nullable
public static OffsetDateTime getTenantExpiredTime(@NonNull String token) {
// to do sth.
}
/**
* 生成JWT令牌的方法
*
* @param username 用户名
* @param secret 令牌的密钥
* @return 返回创建的新令牌
*/
public static String generateJwtToken(@NonNull String username, @NonNull String secret, long expiredTime) {
// to do sth.
}
/**
* 生成JWT令牌的方法
*
* @param tenantCode 租户ID
* @param tenantExpiredTime 租户账号到期时间
* @param username 用户名
* @param secret 令牌的密钥
* @param expiredTime 令牌过期时间
* @return 返回创建的新令牌
*/
public static String generateJwtToken(@NonNull String tenantCode, @NonNull OffsetDateTime tenantExpiredTime, @NonNull String username, @NonNull String secret, long expiredTime) {
// to do sth.
}
/**
* 生成JWT令牌的方法
*
* @param userVO 用户信息
* @param secret 令牌的密钥
* @param expiredTime 令牌过期时间
* @return 返回创建的新令牌
*/
public static String generateJwtToken(@NonNull GeneralUserVO userVO, @NonNull String secret, long expiredTime) {
// to do sth.
}
/**
* 续签令牌的方法
*
* @param token 令牌
* @param secret 密钥
* @param expiredTime 过期时间
* @return 返回续签后的令牌
*/
public static String renewToken(@NonNull String token, @NonNull String secret, long expiredTime) {
// to do sth.
}
/**
* 根据request中的token获取用户账号
*
* @param request 请求对象
* @return 返回用户名
* @throws RuntimeException 当获取不到用户名时抛出该异常
*/
public static String getUsernameByToken(HttpServletRequest request) throws RuntimeException {
// to do sth.
}
/**
* 根据request中的token获取用户账号
*
* @param request 请求对象
* @return 返回用户名
* @throws RuntimeException 当获取不到用户名时抛出该异常
*/
public static String getTenantCodeByToken(HttpServletRequest request) throws RuntimeException {
// to do sth.
}
用法
静态工具类方法,直接使用即可。
演示
String token = "用户令牌"
String roleId = JwtUtils.getArgument(token, "roleId");
if (roleId == null) {
throw new RuntimeException("无法获取用户角色信息");
}
System.out.println(roleId);
String username = JwtUtils.getUsername(token);
if (username == null) {
throw new RuntimeException("无法获取用户信息");
}
System.out.println(username);