对token里面的username 进行加密

This commit is contained in:
weiweiw 2024-11-12 18:31:44 +08:00
parent 75936f519c
commit 0cae52d5ee
3 changed files with 31 additions and 191 deletions

View File

@ -4,9 +4,11 @@ import java.util.Map;
import com.bonus.common.core.constant.SecurityConstants;
import com.bonus.common.core.constant.TokenConstants;
import com.bonus.common.core.text.Convert;
import com.bonus.common.core.utils.encryption.Sm4Utils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
/**
* Jwt工具类
@ -25,8 +27,13 @@ public class JwtUtils
*/
public static String createToken(Map<String, Object> claims)
{
String token = Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS512, secret).compact();
return token;
String username = (String) claims.get(SecurityConstants.DETAILS_USERNAME);
if (!StringUtils.isEmpty(username)){
String encyrptUserName = Sm4Utils.encrypt(username);
claims.put(SecurityConstants.DETAILS_USERNAME, encyrptUserName);
System.out.print("****createToken里加密用户名是" + encyrptUserName);
}
return Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS512, secret).compact();
}
/**
@ -37,7 +44,14 @@ public class JwtUtils
*/
public static Claims parseToken(String token)
{
return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();
Claims claims = Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();
String username = getValue(claims, SecurityConstants.DETAILS_USERNAME);
if (!StringUtils.isEmpty(username)){
String decryUsername = Sm4Utils.decrypt(username);
System.out.print("****parseToken里解密用户名是" + decryUsername);
claims.put(SecurityConstants.DETAILS_USERNAME, decryUsername);
}
return claims;
}
/**
@ -95,7 +109,7 @@ public class JwtUtils
public static String getUserName(String token)
{
Claims claims = parseToken(token);
return getValue(claims, SecurityConstants.DETAILS_USERNAME);
return getUserName(claims);
}
/**
@ -106,7 +120,17 @@ public class JwtUtils
*/
public static String getUserName(Claims claims)
{
return getValue(claims, SecurityConstants.DETAILS_USERNAME);
String encryptUserName = getValue(claims, SecurityConstants.DETAILS_USERNAME);
if (!StringUtils.isEmpty(encryptUserName)){
String decryUsername = Sm4Utils.decrypt(encryptUserName);
if (StringUtils.isEmpty(decryUsername)){
return encryptUserName;
}else {
return decryUsername;
}
}
return "";
}
/**

View File

@ -29,7 +29,7 @@ public class Sm4Utils {
// 返回带盐的加密结果Hex编码
return HexUtil.encodeHexStr(encryptedData);
} catch (Exception e) {
e.printStackTrace();
// e.printStackTrace();
return null; // 发生异常时返回null
}
}
@ -48,7 +48,7 @@ public class Sm4Utils {
byte[] decryptedData = sm4.decrypt(cipherText);
return new String(decryptedData);
} catch (Exception e) {
e.printStackTrace();
// e.printStackTrace();
return null; // 发生异常时返回null
}
}

View File

@ -1,184 +0,0 @@
//package com.bonus.gateway.filter;
//
//import com.bonus.common.core.constant.CacheConstants;
//import com.bonus.common.core.utils.DateUtils;
//import com.bonus.common.core.utils.SpringUtils;
//import com.bonus.common.core.utils.ip.IpUtils;
//import com.bonus.common.redis.service.RedisService;
//
//import com.bonus.system.api.RemoteLogService;
//import com.bonus.system.api.domain.SysLogsVo;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.ObjectUtils;
//import org.springframework.cloud.gateway.filter.GatewayFilterChain;
//import org.springframework.cloud.gateway.filter.GlobalFilter;
//import org.springframework.core.Ordered;
//import org.springframework.stereotype.Component;
//import org.springframework.web.server.ServerWebExchange;
//import reactor.core.publisher.Mono;
//
//import javax.annotation.Resource;
//import java.net.InetAddress;
//import java.net.UnknownHostException;
//import java.time.LocalDateTime;
//import java.time.format.DateTimeFormatter;
//import java.util.List;
//import java.util.Map;
//import java.util.UUID;
//
///**
// * @author bonus
// */
//@Component
//@Slf4j
//public class IpFilter implements GlobalFilter, Ordered {
// @Resource
// private RedisService redisService;
//
//// @Resource
//// private RemoteLogService remoteLogService;
//// public RemoteLogService remoteLogService = SpringUtils.getBean(RemoteLogService.class);
// /**
// * Process the Web request and (optionally) delegate to the next {@code GatewayFilter}
// * through the given {@link GatewayFilterChain}.
// *
// * @param exchange the current server exchange
// * @param chain provides a way to delegate to the next filter
// * @return {@code Mono<Void>} to indicate when request processing is complete
// */
// @Override
// public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// List<Map<String,Object>> cacheList = redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST);
//
// // 获取客户端的 IP 地址
// String ip = exchange.getRequest().getHeaders().getFirst("X-Forwarded-For");
// for (Map<String,Object> map : cacheList) {
// String ipAddress = map.containsKey("ipAddress") ? map.get("ipAddress").toString() : null;
// String ipRangeEnd = map.containsKey("ipRangeEnd") ?map.get("ipRangeEnd").toString(): null;
// String ipRangeStart = map.containsKey("ipRangeStart")?map.get("ipRangeStart").toString():null;
// String accessStartTime =map.containsKey("accessStartTime")? map.get("accessStartTime").toString():null;
// String accessEndTime = map.containsKey("accessEndTime")?map.get("accessEndTime").toString():null;
// if (ObjectUtils.isEmpty(ipAddress)){
// if (isIpInRange(ip, ipRangeStart, ipRangeEnd)){
// if (ObjectUtils.isNotEmpty(accessStartTime)){
// boolean currentTimeInRange = isCurrentTimeInRange(accessStartTime, accessEndTime);
// if (!currentTimeInRange){
// // 完成响应
// handleLog();
// exchange.getResponse().setStatusCode(org.springframework.http.HttpStatus.FORBIDDEN);
// return exchange.getResponse().setComplete();
// }else {
// return chain.filter(exchange);
// }
// }else {
// return chain.filter(exchange);
// }
//
// }
// }else {
// if (ipAddress.equals(ip)){
// if (ObjectUtils.isNotEmpty(accessStartTime)){
// boolean currentTimeInRange = isCurrentTimeInRange(accessStartTime, accessEndTime);
// if (!currentTimeInRange){
// // 完成响应
//// handleLog();
// exchange.getResponse().setStatusCode(org.springframework.http.HttpStatus.FORBIDDEN);
// return exchange.getResponse().setComplete();
// }else {
// return chain.filter(exchange);
// }
// }else {
// return chain.filter(exchange);
// }
// }
// }
// }
// exchange.getResponse().setStatusCode(org.springframework.http.HttpStatus.FORBIDDEN);
// return exchange.getResponse().setComplete();
// }
// private void handleLog()
// {
// SysLogsVo sysLogsVo = new SysLogsVo();
// String uuid= UUID.randomUUID().toString().replace("-","").toUpperCase();
// sysLogsVo.setLogId(uuid);
// sysLogsVo.setOperaUserName("");
// sysLogsVo.setIp(IpUtils.getIpAddr());
// sysLogsVo.setOperTime(DateUtils.getTime());
// sysLogsVo.setLogType(0);
// sysLogsVo.setOperType("IP地址异常");
// sysLogsVo.setWarningStatus("0");
// try {
//// remoteLogService.addLogs(sysLogsVo, "inner");
// } catch (Exception e) {
// throw new RuntimeException(e);
// }
// }
// /**
// * 检查给定的IP地址是否在指定的网段区间内
// *
// * @param ip 要检查的IP地址例如 "192.168.1.10"
// * @param startIp 区间开始的IP地址例如 "192.168.1.0"
// * @param endIp 区间结束的IP地址例如 "192.168.1.255"
// * @return true 如果IP在区间内否则返回 false
// */
// public static boolean isIpInRange(String ip, String startIp, String endIp) {
// try {
// // IP 地址起始 IP 和结束 IP 转换为整数
// long ipToCheck = ipToLong(InetAddress.getByName(ip));
// long start = ipToLong(InetAddress.getByName(startIp));
// long end = ipToLong(InetAddress.getByName(endIp));
//
// // 检查 IP 是否在区间内
// return ipToCheck >= start && ipToCheck <= end;
// } catch (UnknownHostException e) {
// e.printStackTrace();
// return false;
// }
// }
//
// /**
// * 将IP地址转换为整数
// *
// * @param inetAddress IP地址对象
// * @return 转换后的长整数
// */
// private static long ipToLong(InetAddress inetAddress) {
// byte[] octets = inetAddress.getAddress();
// long result = 0;
// for (byte octet : octets) {
// result = (result << 8) | (octet & 0xFF);
// }
// return result;
// }
// public static boolean isCurrentTimeInRange(String startDateTime, String endDateTime) {
// // 定义日期时间格式
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//
// // 将字符串转换为 LocalDateTime
// LocalDateTime start = LocalDateTime.parse(startDateTime, formatter);
// LocalDateTime end = LocalDateTime.parse(endDateTime, formatter);
//
// // 获取当前日期和时间
// LocalDateTime currentDateTime = LocalDateTime.now();
//
// // 检查当前日期和时间是否在指定的范围内
// return !currentDateTime.isBefore(start) && !currentDateTime.isAfter(end);
// }
//
// /**
// * Get the order value of this object.
// * <p>Higher values are interpreted as lower priority. As a consequence,
// * the object with the lowest value has the highest priority (somewhat
// * analogous to Servlet {@code load-on-startup} values).
// * <p>Same order values will result in arbitrary sort positions for the
// * affected objects.
// *
// * @return the order value
// * @see #HIGHEST_PRECEDENCE
// * @see #LOWEST_PRECEDENCE
// */
// @Override
// public int getOrder() {
// return 0;
// }
//}