diff --git a/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/domain/SysLogsVo.java b/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/domain/SysLogsVo.java index b08431b..99fa4eb 100644 --- a/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/domain/SysLogsVo.java +++ b/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/domain/SysLogsVo.java @@ -164,7 +164,7 @@ public class SysLogsVo { try{ String uuid= UUID.randomUUID().toString().replace("-","").toUpperCase(); vo.setLogId(uuid); - String ip = IpUtils.getIpAddr(); + String ip = loginUser.getIpaddr(); vo.setIp(ip); // 设置方法名称 String className = joinPoint.getTarget().getClass().getName(); diff --git a/bonus-auth/src/main/java/com/bonus/auth/service/PasswordValidatorService.java b/bonus-auth/src/main/java/com/bonus/auth/service/PasswordValidatorService.java index 2dcf1b1..8799be6 100644 --- a/bonus-auth/src/main/java/com/bonus/auth/service/PasswordValidatorService.java +++ b/bonus-auth/src/main/java/com/bonus/auth/service/PasswordValidatorService.java @@ -238,7 +238,8 @@ public class PasswordValidatorService { long startTime = System.currentTimeMillis(); try { String blackStr = Convert.toStr(redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST)); - if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) { + String ip = IpUtils.getIpAddr(); + if (IpUtils.isMatchedIp(blackStr,ip )) { logAndThrowError(username, "访问IP已被列入系统黑名单", "访问IP已被列入系统黑名单"); } } catch (Exception e) { diff --git a/bonus-auth/src/main/java/com/bonus/auth/service/SysRecordLogService.java b/bonus-auth/src/main/java/com/bonus/auth/service/SysRecordLogService.java index 57ec8f8..38bd9f4 100644 --- a/bonus-auth/src/main/java/com/bonus/auth/service/SysRecordLogService.java +++ b/bonus-auth/src/main/java/com/bonus/auth/service/SysRecordLogService.java @@ -5,6 +5,7 @@ import com.bonus.common.core.utils.DateUtils; import com.bonus.common.core.utils.global.SystemGlobal; import com.bonus.common.log.enums.OperaResult; import com.bonus.common.log.enums.OperaType; +import com.bonus.config.SystemConfig; import com.bonus.system.api.domain.SysLogsVo; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -15,6 +16,7 @@ import com.bonus.common.core.utils.StringUtils; import com.bonus.common.core.utils.ip.IpUtils; import com.bonus.system.api.RemoteLogService; import com.bonus.system.api.domain.SysLogininfor; +import org.springframework.util.ObjectUtils; import java.util.UUID; @@ -119,6 +121,7 @@ public class SysRecordLogService if (StringUtils.isNotEmpty(userId)){ sysLogsVo.setUserId(userId); } + sysLogsVo.setIp(IpUtils.getIpAddr()); sysLogsVo.setResultData("用户登录成功"); sysLogsVo.setTitle("系统登录"); sysLogsVo.setModel("系统认证模块"); diff --git a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/JwtUtils.java b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/JwtUtils.java index 6b25dde..a6be530 100644 --- a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/JwtUtils.java +++ b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/JwtUtils.java @@ -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 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 ""; } /** diff --git a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/encryption/Sm4Utils.java b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/encryption/Sm4Utils.java index d3825c5..f08b9d1 100644 --- a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/encryption/Sm4Utils.java +++ b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/encryption/Sm4Utils.java @@ -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 } } diff --git a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/global/SystemGlobal.java b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/global/SystemGlobal.java index 86caf1e..7a88850 100644 --- a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/global/SystemGlobal.java +++ b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/global/SystemGlobal.java @@ -49,7 +49,7 @@ public class SystemGlobal { */ public final static String LOG_ERR="2"; - public final static int LOG_DEFEAT_SIZE=1024; + public final static int LOG_DEFEAT_SIZE=1; public final static String ERR_NUM="NAN"; diff --git a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/ip/IpUtils.java b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/ip/IpUtils.java index 341a4bc..4275956 100644 --- a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/ip/IpUtils.java +++ b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/ip/IpUtils.java @@ -1,3 +1,4 @@ + package com.bonus.common.core.utils.ip; import java.net.InetAddress; @@ -8,7 +9,7 @@ import com.bonus.common.core.utils.StringUtils; /** * 获取IP方法 - * + * * @author bonus */ @@ -32,7 +33,7 @@ public class IpUtils /** * 获取客户端IP - * + * * @return IP地址 */ public static String getIpAddr() @@ -42,7 +43,7 @@ public class IpUtils /** * 获取客户端IP - * + * * @param request 请求对象 * @return IP地址 */ @@ -80,7 +81,7 @@ public class IpUtils /** * 检查是否为内部IP地址 - * + * * @param ip IP地址 * @return 结果 */ @@ -92,7 +93,7 @@ public class IpUtils /** * 检查是否为内部IP地址 - * + * * @param addr byte地址 * @return 结果 */ @@ -145,7 +146,7 @@ public class IpUtils /** * 将IPv4地址转换成字节 - * + * * @param text IPv4地址 * @return byte 字节 */ @@ -238,7 +239,7 @@ public class IpUtils /** * 获取IP地址 - * + * * @return 本地IP地址 */ public static String getHostIp() @@ -255,7 +256,7 @@ public class IpUtils /** * 获取主机名 - * + * * @return 本地主机名 */ public static String getHostName() @@ -379,7 +380,7 @@ public class IpUtils /** * 校验ip是否符合过滤串规则 - * + * * @param filter 过滤IP列表,支持后缀'*'通配,支持网段如:`10.10.10.1-10.10.10.99` * @param ip 校验IP地址 * @return boolean 结果 @@ -408,4 +409,4 @@ public class IpUtils } return false; } -} \ No newline at end of file +} diff --git a/bonus-common/bonus-common-log/src/main/java/com/bonus/common/log/aspect/LogAspect.java b/bonus-common/bonus-common-log/src/main/java/com/bonus/common/log/aspect/LogAspect.java index 5f293c6..e03b4f0 100644 --- a/bonus-common/bonus-common-log/src/main/java/com/bonus/common/log/aspect/LogAspect.java +++ b/bonus-common/bonus-common-log/src/main/java/com/bonus/common/log/aspect/LogAspect.java @@ -3,13 +3,16 @@ package com.bonus.common.log.aspect; import java.util.Collection; import java.util.Map; import java.util.UUID; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.alibaba.fastjson2.JSONObject; import com.bonus.common.core.utils.DateUtils; +import com.bonus.common.core.utils.SpringUtils; import com.bonus.common.core.utils.global.SystemGlobal; import com.bonus.common.log.annotation.SysLog; +import com.bonus.config.SystemConfig; import com.bonus.system.api.domain.SysLogsVo; import org.apache.commons.lang3.ArrayUtils; import org.aspectj.lang.JoinPoint; @@ -23,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.NamedThreadLocal; import org.springframework.http.HttpMethod; import org.springframework.stereotype.Component; +import org.springframework.util.ObjectUtils; import org.springframework.validation.BindingResult; import org.springframework.web.multipart.MultipartFile; import com.alibaba.fastjson2.JSON; diff --git a/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/auth/AuthLogic.java b/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/auth/AuthLogic.java index bbc22ab..329b9ca 100644 --- a/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/auth/AuthLogic.java +++ b/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/auth/AuthLogic.java @@ -6,7 +6,9 @@ import cn.hutool.json.JSONObject; import com.bonus.common.core.constant.SecurityConstants; import com.bonus.common.core.domain.R; import com.bonus.common.core.utils.DateUtils; +import com.bonus.common.core.utils.ip.IpUtils; import com.bonus.common.security.utils.LogsUtils; +import com.bonus.config.SystemConfig; import com.bonus.system.api.RemoteLogService; import com.bonus.system.api.domain.SysLogsVo; import org.aspectj.lang.ProceedingJoinPoint; @@ -42,6 +44,8 @@ public class AuthLogic public RemoteLogService logService = SpringUtils.getBean(RemoteLogService.class); + + public SystemConfig systemConfig = SpringUtils.getBean(SystemConfig.class); /** * 会话注销 */ @@ -180,6 +184,7 @@ public class AuthLogic public void addErrorLogs(ProceedingJoinPoint joinPoint,RequiresPermissions requiresPermissions){ try{ LoginUser loginUser = getLoginUser(); + loginUser.setIpaddr(IpUtils.getIpAddr()); SysLogsVo vo=SysLogsVo.getExceedAuthorithSysLogsVo(loginUser,joinPoint); LogsUtils.setRequestValue(joinPoint,vo,null); SysLogsVo sysLogsVo=new SysLogsVo(); diff --git a/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/feign/FeignRequestInterceptor.java b/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/feign/FeignRequestInterceptor.java index 44fa59a..fa82d5f 100644 --- a/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/feign/FeignRequestInterceptor.java +++ b/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/feign/FeignRequestInterceptor.java @@ -2,6 +2,9 @@ package com.bonus.common.security.feign; import java.util.Map; import javax.servlet.http.HttpServletRequest; + +import com.bonus.common.core.utils.SpringUtils; +import com.bonus.config.SystemConfig; import org.springframework.stereotype.Component; import com.bonus.common.core.constant.SecurityConstants; import com.bonus.common.core.utils.ServletUtils; diff --git a/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/service/TokenService.java b/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/service/TokenService.java index be88e7b..cea20f8 100644 --- a/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/service/TokenService.java +++ b/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/service/TokenService.java @@ -20,6 +20,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.util.ObjectUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; diff --git a/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/utils/SecurityUtils.java b/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/utils/SecurityUtils.java index cc30b41..a5614bf 100644 --- a/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/utils/SecurityUtils.java +++ b/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/utils/SecurityUtils.java @@ -5,8 +5,8 @@ import com.bonus.common.core.constant.TokenConstants; import com.bonus.common.core.context.SecurityContextHolder; import com.bonus.common.core.utils.ServletUtils; import com.bonus.common.core.utils.StringUtils; +import com.bonus.common.core.utils.encryption.Sm4Utils; import com.bonus.system.api.model.LoginUser; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import javax.servlet.http.HttpServletRequest; @@ -99,8 +99,8 @@ public class SecurityUtils */ public static String encryptPassword(String password) { - BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); - return passwordEncoder.encode(password); + return Sm4Utils.encrypt(password); + } /** @@ -112,17 +112,17 @@ public class SecurityUtils */ public static boolean matchesPassword(String rawPassword, String encodedPassword) { - BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); - return passwordEncoder.matches(rawPassword, encodedPassword); + return encodedPassword.equals(Sm4Utils.encrypt(rawPassword)); } public static void main(String[] args) { //$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2 //$2a$10$zvlw3Mu8M.j.MhAChrYwluj88ziX6lVD3AoRrBQpwKMcdIZvKMoR2 // String msg= encryptPassword("Admin@1234"); - String msg= encryptPassword("Bonus$2024"); - boolean rest = matchesPassword("Bonus$2024","$2a$10$8JaKSUAU.K.mceU1.YQbd.wP4EJzbrsIscjAwPlfDR7wAWV6s/BGa"); + String msg= encryptPassword("15888888888"); +// boolean rest = matchesPassword("Bonus$2024","$2a$10$8JaKSUAU.K.mceU1.YQbd.wP4EJzbrsIscjAwPlfDR7wAWV6s/BGa"); +// String msg = Sm4Utils.encrypt("Bonus$2026"); System.err.println(msg); - System.err.println(rest); +// System.err.println(rest); } } diff --git a/bonus-gateway/src/main/java/com/bonus/gateway/config/CaptchaConfig.java b/bonus-gateway/src/main/java/com/bonus/gateway/config/CaptchaConfig.java index 9655c49..d17d4e6 100644 --- a/bonus-gateway/src/main/java/com/bonus/gateway/config/CaptchaConfig.java +++ b/bonus-gateway/src/main/java/com/bonus/gateway/config/CaptchaConfig.java @@ -32,10 +32,12 @@ public class CaptchaConfig properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "40"); // KAPTCHA_SESSION_KEY properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCode"); - // 验证码文本字符长度 默认为5 - properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "6"); +// // 验证码文本字符长度 默认为5,这个在自定义文本生成器里定义 +// properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4"); // 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier"); + + properties.setProperty(KAPTCHA_TEXTPRODUCER_IMPL, "com.bonus.gateway.config.MixedTextCreator"); // 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy // properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy"); Config config = new Config(properties); diff --git a/bonus-gateway/src/main/java/com/bonus/gateway/config/KaptchaTextCreator.java b/bonus-gateway/src/main/java/com/bonus/gateway/config/KaptchaTextCreator.java index 44a7e6e..ddf910e 100644 --- a/bonus-gateway/src/main/java/com/bonus/gateway/config/KaptchaTextCreator.java +++ b/bonus-gateway/src/main/java/com/bonus/gateway/config/KaptchaTextCreator.java @@ -4,7 +4,7 @@ import java.util.Random; import com.google.code.kaptcha.text.impl.DefaultTextCreator; /** - * 验证码文本生成器 + * 数学计算验证码文本生成器 * * @author bonus */ diff --git a/bonus-gateway/src/main/java/com/bonus/gateway/config/MixedTextCreator.java b/bonus-gateway/src/main/java/com/bonus/gateway/config/MixedTextCreator.java new file mode 100644 index 0000000..f6f291d --- /dev/null +++ b/bonus-gateway/src/main/java/com/bonus/gateway/config/MixedTextCreator.java @@ -0,0 +1,44 @@ +package com.bonus.gateway.config; + + +import com.google.code.kaptcha.text.TextProducer; +import java.util.Random; + +public class MixedTextCreator implements TextProducer { + private static final String NUMBERS = "23456789"; + private static final String LETTERS = "abcdefghijkmnopqrstuvwxyz"; + private final Random random = new Random(); + + @Override + public String getText() { + // 确保至少包含2个数字和2个字母 + StringBuilder text = new StringBuilder(6); + + // 添加2个随机数字 + for (int i = 0; i < 2; i++) { + text.append(NUMBERS.charAt(random.nextInt(NUMBERS.length()))); + } + + // 添加2个随机字母 + for (int i = 0; i < 2; i++) { + text.append(LETTERS.charAt(random.nextInt(LETTERS.length()))); + } + + // 添加剩余2个随机字符(可以是数字或字母) + String allChars = NUMBERS + LETTERS; + for (int i = 0; i < 2; i++) { + text.append(allChars.charAt(random.nextInt(allChars.length()))); + } + + // 打乱字符顺序 + char[] chars = text.toString().toCharArray(); + for (int i = chars.length - 1; i > 0; i--) { + int index = random.nextInt(i + 1); + char temp = chars[index]; + chars[index] = chars[i]; + chars[i] = temp; + } + + return new String(chars); + } +} \ No newline at end of file diff --git a/bonus-gateway/src/main/java/com/bonus/gateway/filter/IpFilter.java b/bonus-gateway/src/main/java/com/bonus/gateway/filter/IpFilter.java deleted file mode 100644 index bca2c53..0000000 --- a/bonus-gateway/src/main/java/com/bonus/gateway/filter/IpFilter.java +++ /dev/null @@ -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} to indicate when request processing is complete -// */ -// @Override -// public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { -// List> cacheList = redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST); -// -// // 获取客户端的 IP 地址 -// String ip = exchange.getRequest().getHeaders().getFirst("X-Forwarded-For"); -// for (Map 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. -// *

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). -// *

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; -// } -//} diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/controller/SysLogController.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/controller/SysLogController.java index 2cceffa..11811e4 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/controller/SysLogController.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/controller/SysLogController.java @@ -184,11 +184,12 @@ public class SysLogController extends BaseController { return service.getLogStatistics(dto); } -// @ApiOperation(value = "查询日志告警") -// @PostMapping("logWarn") -// public R> logWarn() { -// return service.logWarn(); -// } + @ApiOperation(value = "查询日志告警") + @GetMapping("logWarn") + public AjaxResult logWarn() { + service.handleWarningLog(); + return success(); + } } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/controller/SysUserController.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/controller/SysUserController.java index 42e8741..b727e3e 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/controller/SysUserController.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/controller/SysUserController.java @@ -76,7 +76,7 @@ public class SysUserController extends BaseController { @RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth, requiresPermissions = @RequiresPermissions("system:user:list")) @GetMapping("/list") @PreventRepeatSubmit - // @SysLog(title = "用户管理", businessType = OperaType.QUERY, logType = 0, module = "系统管理->用户管理", details = "查询用户列表") + @SysLog(title = "用户管理", businessType = OperaType.QUERY, logType = 0, module = "系统管理->用户管理", details = "查询用户列表") public TableDataInfo list(SysUser user) { try { startPage(); @@ -229,10 +229,6 @@ public class SysUserController extends BaseController { ajax.put("user", user); ajax.put("roles", roles); ajax.put("permissions", permissions); - //在系统管理员和审计管理员登录时处理警告日志 - if(roles.contains("admin") || roles.contains("audit") || roles.contains("systemAdmin")){ - sysLogService.handleWarningLog(); - } return ajax; } catch (Exception e) { logger.error(e.toString(), e); diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysLogServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysLogServiceImpl.java index 3079115..57ba247 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysLogServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysLogServiceImpl.java @@ -1,5 +1,6 @@ package com.bonus.system.service.impl; +import com.bonus.config.SystemConfig; import com.bonus.system.warning.SysWarning; import com.bonus.system.warning.WaringLogEvent; import com.google.common.collect.Maps; @@ -25,6 +26,7 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; +import org.springframework.util.ObjectUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @@ -69,7 +71,7 @@ public class SysLogServiceImpl implements ISysLogService { } mapper.saveLogs(sysLog); if (sysLog.getLogType() == 2) { - eventPublisher.publishEvent(new WaringLogEvent(new SysWarning(sysLog.getLogId(),sysLog.getErrType() ,sysLog.getIp(),sysLog.getOperaUserName(),sysLog.getOperTime()))); + eventPublisher.publishEvent(new WaringLogEvent(new SysWarning(sysLog.getLogId(),sysLog.getErrType() ,sysLog.getIp(),sysLog.getOperaUserName(),sysLog.getOperTime(),"0"))); } } catch (Exception e) { log.error("保存系统日志"); @@ -83,8 +85,8 @@ public class SysLogServiceImpl implements ISysLogService { try{ String loginUuid = IdUtils.fastUUID(); String ip = IpUtils.getIpAddr(request); - sysLog.setLogId(loginUuid); sysLog.setIp(ip); + sysLog.setLogId(loginUuid); sysLog.setGrade("高"); sysLog.setErrType("越权访问"); sysLog.setFailureReason("页面未授权"); @@ -110,7 +112,7 @@ public class SysLogServiceImpl implements ISysLogService { } mapper.saveLogs(sysLog); if (sysLog.getLogType() == 2) { - eventPublisher.publishEvent(new WaringLogEvent(new SysWarning(loginUuid, "越权访问", ip, user.getUsername(), DateUtils.getTime()))); + eventPublisher.publishEvent(new WaringLogEvent(new SysWarning(loginUuid, "越权访问", ip, user.getUsername(), DateUtils.getTime(),"0"))); } }catch (Exception e){ log.error(e.toString(),e); @@ -143,7 +145,7 @@ public class SysLogServiceImpl implements ISysLogService { try{ String capacity=mapper.getLogsSet(); if(StringUtils.isEmpty(capacity)){ - return R.ok("1024"); + return R.ok("1"); } return R.ok(capacity); }catch (Exception e){ @@ -165,12 +167,12 @@ public class SysLogServiceImpl implements ISysLogService { return R.fail("请输入数字"); } }else{ - return R.fail("日志容量最低是"+SystemGlobal.LOG_DEFEAT_SIZE+"Mb"); + return R.fail("日志容量最低是"+SystemGlobal.LOG_DEFEAT_SIZE+"GB"); } Double cap=Double.parseDouble(capacity); if(cap=max){ - String warningEvent = "日志容量告警,当日日志内存为" +d+ "MB,日志内存超过总内存的90%,请及时处理!"; - eventPublisher.publishEvent(new WaringLogEvent(new SysWarning("0",warningEvent,"",null,null))); + String warningEvent = "日志容量告警,当日日志内存为" +d+ "GB,日志内存超过总内存的90%,请及时处理!"; + eventPublisher.publishEvent(new WaringLogEvent(new SysWarning("0",warningEvent,"",null,null, "1"))); } }catch (Exception e){ log.error(e.toString(),e); @@ -286,7 +288,7 @@ public class SysLogServiceImpl implements ISysLogService { List list = mapper.getNotHandleWarningLog(); // 使用for-each循环遍历List for (SysLogsVo item : list) { - eventPublisher.publishEvent(new WaringLogEvent(new SysWarning(item.getLogId(),item.getErrType(), item.getIp(),item.getOperaUserName(),item.getOperTime()))); + eventPublisher.publishEvent(new WaringLogEvent(new SysWarning(item.getLogId(),item.getErrType(), item.getIp(),item.getOperaUserName(),item.getOperTime(),"0"))); log.info("*****系统管理员和审计管理员处理异常日志*******"); } } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysOperLogServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysOperLogServiceImpl.java index f1ffee1..de2864f 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysOperLogServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysOperLogServiceImpl.java @@ -104,7 +104,7 @@ public class SysOperLogServiceImpl implements ISysOperLogService public int addLogs(SysLogsVo sysLogsVo) { if (sysLogsVo.getLogType() == 2) { sysLogsVo.setWarningStatus("0"); - eventPublisher.publishEvent(new WaringLogEvent(new SysWarning(sysLogsVo.getLogId(), sysLogsVo.getErrType(), sysLogsVo.getIp(), sysLogsVo.getOperaUserName(), sysLogsVo.getOperTime()))); + eventPublisher.publishEvent(new WaringLogEvent(new SysWarning(sysLogsVo.getLogId(), sysLogsVo.getErrType(), sysLogsVo.getIp(), sysLogsVo.getOperaUserName(), sysLogsVo.getOperTime(), "0"))); } return operLogMapper.addLogs(sysLogsVo); } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/warning/SysWarning.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/warning/SysWarning.java index 9fc24a7..8d6d8a9 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/warning/SysWarning.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/warning/SysWarning.java @@ -7,12 +7,13 @@ import java.util.Date; @Data public class SysWarning { - public SysWarning(String warningId,String warningEvent,String warningIp,String operaUserName,String operaTime ){ + public SysWarning(String warningId,String warningEvent,String warningIp,String operaUserName,String operaTime, String warningStatus){ this.warningId = warningId; this.warningEvent = warningEvent; this.warningIp = warningIp; this.operaUserName = operaUserName; this.operaTime = operaTime; + this.warningStatus = warningStatus; } private String warningId; diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/warning/WebSocketHandler.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/warning/WebSocketHandler.java index 2c3d6bd..4a10cc3 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/warning/WebSocketHandler.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/warning/WebSocketHandler.java @@ -1,6 +1,7 @@ package com.bonus.system.warning; import com.alibaba.fastjson.JSON; +import com.bonus.common.core.utils.SpringUtils; import com.bonus.system.service.ISysLogService; import lombok.extern.slf4j.Slf4j; import org.springframework.context.event.EventListener; @@ -24,9 +25,6 @@ public class WebSocketHandler extends TextWebSocketHandler { private static final Logger logger = LoggerFactory.getLogger(WebSocketHandler.class); private static final CopyOnWriteArrayList sessions = new CopyOnWriteArrayList<>(); - @Resource(name = "ISysLogService") - private ISysLogService logService; - public static void closeSession(WebSocketSession session) throws IOException { session.close(); } @@ -42,7 +40,7 @@ public class WebSocketHandler extends TextWebSocketHandler { String jsonStr = JSON.toJSONString(warning); sendMessageToAll(jsonStr); } catch (Exception e) { - System.out.print("处理日志告警失败"); + logger.error("处理日志告警失败" + event); } } @@ -53,7 +51,7 @@ public class WebSocketHandler extends TextWebSocketHandler { @EventListener public void handleWebSocketConnectListener(SessionConnectedEvent event) { StompHeaderAccessor headerAccessor = StompHeaderAccessor.wrap(event.getMessage()); - System.out.println("WebSocket 连接建立,Session ID: " + headerAccessor.getSessionId()); + logger.debug("WebSocket 连接建立,Session ID: " + headerAccessor.getSessionId()); } /** @@ -63,35 +61,36 @@ public class WebSocketHandler extends TextWebSocketHandler { @EventListener public void handleWebSocketDisconnectListener(SessionDisconnectEvent event) { StompHeaderAccessor headerAccessor = StompHeaderAccessor.wrap(event.getMessage()); - System.out.println("WebSocket 连接断开,Session ID: " + headerAccessor.getSessionId()); + logger.debug("WebSocket 连接断开,Session ID: " + headerAccessor.getSessionId()); } // 处理用户确认消息 @MessageMapping("/alert-handled") public void handleAlert(String alertId) { // 在这里处理告警确认逻辑 - System.out.println("Alert " + alertId + " has been handled"); + logger.debug("Alert " + alertId + " has been handled"); } @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { sessions.add(session); - logger.info("WebSocket 连接成功: " + session.getId()); + logger.debug("WebSocket 连接成功: " + session.getId()); } @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { String payload = message.getPayload(); - logger.info("接收到消息: " + payload); + logger.debug("接收到消息: " + payload); + ISysLogService logService = SpringUtils.getBean(ISysLogService.class); logService.updateLogsWithHandledStatus(payload); } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { sessions.remove(session); - logger.info("WebSocket 连接关闭: " + session.getId()); + logger.debug("WebSocket 连接关闭: " + session.getId()); } public void sendMessageToAll(String message) throws Exception { diff --git a/bonus-modules/bonus-system/src/main/resources/mapper/system/SysLogMapper.xml b/bonus-modules/bonus-system/src/main/resources/mapper/system/SysLogMapper.xml index dec38b6..1617650 100644 --- a/bonus-modules/bonus-system/src/main/resources/mapper/system/SysLogMapper.xml +++ b/bonus-modules/bonus-system/src/main/resources/mapper/system/SysLogMapper.xml @@ -225,7 +225,7 @@ @@ -270,7 +270,7 @@ SELECT log_id logId, opera_user_name operaUserName,ip, user_id userId, oper_time operTime, - oper_type operType + oper_type operType, err_type errType FROM sys_logs where warning_status=0 diff --git a/sql/bns_20240604.sql b/sql/bns_20240604.sql index 005cc27..b2409c9 100644 --- a/sql/bns_20240604.sql +++ b/sql/bns_20240604.sql @@ -25,16 +25,16 @@ create table sys_dept ( -- ---------------------------- -- 初始化-部门表数据 -- ---------------------------- -insert into sys_dept values(100, 0, '0', '博诺思信息科技有限公司', 0, '博诺思', '15888888888', 'xiaosi@ahbonus.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(101, 100, '0,100', '合肥总公司', 1, '博诺思', '15888888888', 'xiaosi@ahbonus.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(102, 100, '0,100', '宿州分公司', 2, '博诺思', '15888888888', 'xiaosi@ahbonus.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(103, 101, '0,100,101', '研发部门', 1, '博诺思', '15888888888', 'xiaosi@ahbonus.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(104, 101, '0,100,101', '市场部门', 2, '博诺思', '15888888888', 'xiaosi@ahbonus.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(105, 101, '0,100,101', '测试部门', 3, '博诺思', '15888888888', 'xiaosi@ahbonus.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(106, 101, '0,100,101', '财务部门', 4, '博诺思', '15888888888', 'xiaosi@ahbonus.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(107, 101, '0,100,101', '运维部门', 5, '博诺思', '15888888888', 'xiaosi@ahbonus.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(108, 102, '0,100,102', '市场部门', 1, '博诺思', '15888888888', 'xiaosi@ahbonus.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(109, 102, '0,100,102', '财务部门', 2, '博诺思', '15888888888', 'xiaosi@ahbonus.com', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(100, 0, '0', '博诺思信息科技有限公司', 0, '博诺思', '5b55c99f4df0945eed334f450b7f8aa5', '6808c5cacbe63dcd24944a4ee5d87956d26feac836c13cac1a478c1fc47f9531', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(101, 100, '0,100', '合肥总公司', 1, '博诺思', '5b55c99f4df0945eed334f450b7f8aa5', '6808c5cacbe63dcd24944a4ee5d87956d26feac836c13cac1a478c1fc47f9531', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(102, 100, '0,100', '宿州分公司', 2, '博诺思', '5b55c99f4df0945eed334f450b7f8aa5', '6808c5cacbe63dcd24944a4ee5d87956d26feac836c13cac1a478c1fc47f9531', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(103, 101, '0,100,101', '研发部门', 1, '博诺思', '5b55c99f4df0945eed334f450b7f8aa5', '6808c5cacbe63dcd24944a4ee5d87956d26feac836c13cac1a478c1fc47f9531', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(104, 101, '0,100,101', '市场部门', 2, '博诺思', '5b55c99f4df0945eed334f450b7f8aa5', '6808c5cacbe63dcd24944a4ee5d87956d26feac836c13cac1a478c1fc47f9531', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(105, 101, '0,100,101', '测试部门', 3, '博诺思', '5b55c99f4df0945eed334f450b7f8aa5', '6808c5cacbe63dcd24944a4ee5d87956d26feac836c13cac1a478c1fc47f9531', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(106, 101, '0,100,101', '财务部门', 4, '博诺思', '5b55c99f4df0945eed334f450b7f8aa5', '6808c5cacbe63dcd24944a4ee5d87956d26feac836c13cac1a478c1fc47f9531', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(107, 101, '0,100,101', '运维部门', 5, '博诺思', '5b55c99f4df0945eed334f450b7f8aa5', '6808c5cacbe63dcd24944a4ee5d87956d26feac836c13cac1a478c1fc47f9531', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(108, 102, '0,100,102', '市场部门', 1, '博诺思', '5b55c99f4df0945eed334f450b7f8aa5', '6808c5cacbe63dcd24944a4ee5d87956d26feac836c13cac1a478c1fc47f9531', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(109, 102, '0,100,102', '财务部门', 2, '博诺思', '5b55c99f4df0945eed334f450b7f8aa5', '6808c5cacbe63dcd24944a4ee5d87956d26feac836c13cac1a478c1fc47f9531', '0', '0', 'admin', sysdate(), '', null); -- ---------------------------- @@ -68,20 +68,11 @@ create table sys_user ( primary key (user_id) ) engine=innodb auto_increment=100 comment = '用户信息表'; -ALTER TABLE `bns-cloud`.sys_user ADD is_permanent char(1) DEFAULT '1' NULL COMMENT '长期和临时用户标识0:临时用户,1:长期用户'; -ALTER TABLE `bns-cloud`.sys_user ADD is_built_in char(1) DEFAULT '1' NULL COMMENT '是否内置用户0:内置用户,1:非内置用户'; - -ALTER TABLE `bns-cloud`.sys_dept MODIFY COLUMN phone varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '联系电话'; -ALTER TABLE `bns-cloud`.sys_dept MODIFY COLUMN email varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '邮箱'; - -ALTER TABLE `bns-cloud`.sys_user MODIFY COLUMN email varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' NULL COMMENT '用户邮箱'; -ALTER TABLE `bns-cloud`.sys_user MODIFY COLUMN phonenumber varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' NULL COMMENT '手机号码'; - -- ---------------------------- -- 初始化-用户信息表数据 -- ---------------------------- -insert into sys_user values(1, 103, 'bonus', '博诺思', '00', '38fb2b6be1e8b9024b0140fc673f0ed245b6b82ae6464387bbe806dc68e66fa8', '4eb762402e0ce5ef9d0028e2d622c53bc8ea1d7680ea4416975e4cc23b4ef7f0', '1', '', '$2a$10$5azz92OgGRyRUETz/ZJeZu1exkggPYUDRssvreywTjKk.0Pmn2Q16', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null,sysdate(), '系统管理员','0','0','1'); -insert into sys_user values(2, 103, 'audit', '博诺思', '00', '38fb2b6be1e8b9024b0140fc673f0ed245b6b82ae6464387bbe806dc68e66fa8', '4eb762402e0ce5ef9d0028e2d622c53bc8ea1d7680ea4416975e4cc23b4ef7f0', '1', '', '$2a$10$5azz92OgGRyRUETz/ZJeZu1exkggPYUDRssvreywTjKk.0Pmn2Q16', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null,sysdate(),'审计管理员','0','0','1'); +insert into sys_user values(1, 103, 'bonus', '博诺思', '00', '6668e3b17f15bf95c947d2e846aa39d2', '52d5f4cd548656484535afd493651f40', '1', '', 'a45acb66346098aa606768ee404e2c3c', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null,sysdate(), '系统管理员','0','0','1'); +insert into sys_user values(2, 103, 'audit', '博诺思', '00', '6668e3b17f15bf95c947d2e846aa39d2', '52d5f4cd548656484535afd493651f40', '1', '', 'a45acb66346098aa606768ee404e2c3c', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null,sysdate(),'审计管理员','0','0','1'); -- ---------------------------- @@ -136,8 +127,6 @@ create table sys_role ( primary key (role_id) ) engine=innodb auto_increment=100 comment = '角色信息表'; -ALTER TABLE `bns-cloud`.sys_role ADD is_built_in char(1) DEFAULT '1' NULL COMMENT '是否内置0:非内置角色,1:内置角色'; - ---------------------- -- 初始化-角色信息表数据 -- ---------------------------- @@ -295,6 +284,16 @@ INSERT INTO `sys_menu` VALUES (2012, '查询', 2011, 1, '', NULL, NULL, 1, 0, 'F INSERT INTO `sys_menu` VALUES (2013, '修改', 2011, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', NULL, '#', 'admin', '2024-07-16 07:25:56', '', NULL, '', '0'); INSERT INTO `sys_menu` VALUES (2014, '报警', 2011, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', NULL, '#', 'admin', '2024-07-16 07:26:08', '', NULL, '', '0'); +INSERT INTO `sys_menu` VALUES (2020, '白名单管理', 1, 1, 'ipWhitelist', 'system/ipWhitelist/index', NULL, 1, 0, 'C', '0', '0', 'system:whitelist:list', 'clipboard', 'admin', '2024-11-06 06:23:22', 'bonus_admin', '2024-11-06 06:28:51', '【请填写功能名称】菜单', '0'); +INSERT INTO `sys_menu` VALUES (2021, '查询', 2020, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:whitelist:query', '#', 'admin', '2024-11-06 06:23:22', 'bonus_admin', '2024-11-06 06:24:56', '', '0'); +INSERT INTO `sys_menu` VALUES (2022, '新增', 2020, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:whitelist:add', '#', 'admin', '2024-11-06 06:23:22', 'bonus_admin', '2024-11-06 06:25:05', '', '0'); +INSERT INTO `sys_menu` VALUES (2023, '修改', 2020, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:whitelist:edit', '#', 'admin', '2024-11-06 06:23:22', 'bonus_admin', '2024-11-06 06:25:13', '', '0'); +INSERT INTO `sys_menu` VALUES (2024, '删除', 2020, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:whitelist:remove', '#', 'admin', '2024-11-06 06:23:22', 'bonus_admin', '2024-11-06 06:25:20', '', '0'); +INSERT INTO `sys_menu` VALUES (2025, '导出', 2020, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:whitelist:export', '#', 'admin', '2024-11-06 06:23:22', 'bonus_admin', '2024-11-06 06:25:28', '', '0'); +INSERT INTO `sys_menu` VALUES (2026, '用户锁定', 1, 7, 'lockUser', 'system/lockUser/index', NULL, 1, 0, 'C', '0', '0', NULL, 'radio', 'bonus_admin', '2024-11-07 03:10:44', '', NULL, '', '0'); + + + -- ---------------------------- -- 6、用户和角色关联表 用户N-1角色 -- ---------------------------- @@ -759,6 +758,7 @@ create table sys_logs ( method_type varchar(30) NULL DEFAULT NULL COMMENT '方法类型 POST/个体', title varchar(255) NULL DEFAULT NULL, result_data varchar(3000) NULL DEFAULT NULL COMMENT '返回数据', + warning_status char(1) NULL DEFAULT '1' NULL COMMENT'0未处理,1已处理' PRIMARY KEY (log_id) USING BTREE ) engine = innodb comment = '系统日志表' ; @@ -770,36 +770,4 @@ create table sys_logs_set ( capacity varchar(255) NULL DEFAULT NULL ) engine = innodb comment = '数据库日志容量设置表'; -insert into sys_logs_set values ('2048'); - --- ------------------------------ --- 22 waring table --- ------------------------------ -drop table if exists sys_warning; -create table sys_warning ( - warning_id bigint(20) not null auto_increment comment '编号', - warning_event varchar(50) default '' comment '告警事件', - warning_content varchar(50) default '' comment '告警内容', - warning_ip varchar(50) default '' comment '告警IP', - warning_grade varchar(50) default '' comment '告警等级', - opera_user_name varchar(50) default '' comment '操作人名称', - warning_time datetime default sysdate comment '告警时间', - warning_status char(1) default '0' comment '告警状态0未处理,1已处理', - primary key (warning_id) -) engine = innodb comment = '报警日志表'; - - -drop table if exists sys_ip_whitelist; -CREATE TABLE `sys_ip_whitelist` ( - `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', - `ip_address` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '单个IP地址', - `ip_range_start` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'IP网段起始地址', - `ip_range_end` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'IP网段结束地址', - `access_start_time` timestamp NULL DEFAULT NULL COMMENT '允许访问的开始时间', - `access_end_time` timestamp NULL DEFAULT NULL COMMENT '允许访问的结束时间', - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间', - `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间', - `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '帐号状态(0正常 1停用)', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = innodb CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; - +insert into sys_logs_set values ('1'); diff --git a/sql/bns_202411_patch.sql b/sql/bns_202411_patch.sql new file mode 100644 index 0000000..14b2db9 --- /dev/null +++ b/sql/bns_202411_patch.sql @@ -0,0 +1,57 @@ +SET NAMES utf8mb4; + +ALTER TABLE sys_user ADD is_permanent char(1) DEFAULT '1' NULL COMMENT '长期和临时用户标识0:临时用户,1:长期用户'; +ALTER TABLE sys_user ADD is_built_in char(1) DEFAULT '1' NULL COMMENT '是否内置用户0:内置用户,1:非内置用户'; + +ALTER TABLE sys_dept MODIFY COLUMN phone varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '联系电话'; +ALTER TABLE sys_dept MODIFY COLUMN email varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '邮箱'; + +ALTER TABLE sys_user MODIFY COLUMN email varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' NULL COMMENT '用户邮箱'; +ALTER TABLE sys_user MODIFY COLUMN phonenumber varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' NULL COMMENT '手机号码'; + +ALTER TABLE sys_role ADD is_built_in char(1) DEFAULT '1' NULL COMMENT '是否内置0:内置角色,1:非内置角色'; + +ALTER TABLE sys_logs +ADD COLUMN warning_status CHAR(1) NULL DEFAULT '1' COMMENT '0未处理,1已处理'; + +ALTER TABLE sys_logs_set MODIFY COLUMN capacity varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '1' NULL COMMENT '单位是GB'; + +-- ------------------------------ +-- 22 waring table +-- ------------------------------ +drop table if exists sys_warning; +create table sys_warning ( + warning_id bigint(20) not null auto_increment comment '编号', + warning_event varchar(50) default '' comment '告警事件', + warning_content varchar(50) default '' comment '告警内容', + warning_ip varchar(50) default '' comment '告警IP', + warning_grade varchar(50) default '' comment '告警等级', + opera_user_name varchar(50) default '' comment '操作人名称', + warning_time datetime default NULL comment '告警时间', + warning_status char(1) default '0' comment '告警状态0未处理,1已处理', + primary key (warning_id) +) engine = innodb comment = '报警日志表'; + + +drop table if exists sys_ip_whitelist; +CREATE TABLE `sys_ip_whitelist` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `ip_address` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '单个IP地址', + `ip_range_start` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'IP网段起始地址', + `ip_range_end` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'IP网段结束地址', + `access_start_time` timestamp NULL DEFAULT NULL COMMENT '允许访问的开始时间', + `access_end_time` timestamp NULL DEFAULT NULL COMMENT '允许访问的结束时间', + `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间', + `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '帐号状态(0正常 1停用)', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = innodb CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + + +INSERT INTO `sys_menu` VALUES (2020, '白名单管理', 1, 1, 'ipWhitelist', 'system/ipWhitelist/index', NULL, 1, 0, 'C', '0', '0', 'system:whitelist:list', 'clipboard', 'admin', '2024-11-06 06:23:22', 'bonus_admin', '2024-11-06 06:28:51', '【请填写功能名称】菜单', '0'); +INSERT INTO `sys_menu` VALUES (2021, '查询', 2020, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:whitelist:query', '#', 'admin', '2024-11-06 06:23:22', 'bonus_admin', '2024-11-06 06:24:56', '', '0'); +INSERT INTO `sys_menu` VALUES (2022, '新增', 2020, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:whitelist:add', '#', 'admin', '2024-11-06 06:23:22', 'bonus_admin', '2024-11-06 06:25:05', '', '0'); +INSERT INTO `sys_menu` VALUES (2023, '修改', 2020, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:whitelist:edit', '#', 'admin', '2024-11-06 06:23:22', 'bonus_admin', '2024-11-06 06:25:13', '', '0'); +INSERT INTO `sys_menu` VALUES (2024, '删除', 2020, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:whitelist:remove', '#', 'admin', '2024-11-06 06:23:22', 'bonus_admin', '2024-11-06 06:25:20', '', '0'); +INSERT INTO `sys_menu` VALUES (2025, '导出', 2020, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:whitelist:export', '#', 'admin', '2024-11-06 06:23:22', 'bonus_admin', '2024-11-06 06:25:28', '', '0'); +INSERT INTO `sys_menu` VALUES (2026, '用户锁定', 1, 7, 'lockUser', 'system/lockUser/index', NULL, 1, 0, 'C', '0', '0', NULL, 'radio', 'bonus_admin', '2024-11-07 03:10:44', '', NULL, '', '0');