From 75936f519cbc0a01b730350996412680c98733fa Mon Sep 17 00:00:00 2001 From: weiweiw <14335254+weiweiw22@user.noreply.gitee.com> Date: Tue, 12 Nov 2024 14:54:47 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E6=97=A5=E5=BF=97=E5=AE=B9=E9=87=8F?= =?UTF-8?q?=E8=BE=BE=E5=88=B0=E4=B8=8A=E9=99=90=E7=9A=8490%=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E5=91=8A=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/security/utils/SecurityUtils.java | 17 +++++++++-------- .../system/controller/SysLogController.java | 11 ++++++----- .../system/controller/SysUserController.java | 4 ---- .../service/impl/SysLogServiceImpl.java | 8 ++++---- .../service/impl/SysOperLogServiceImpl.java | 2 +- .../com/bonus/system/warning/SysWarning.java | 3 ++- .../system/warning/WebSocketHandler.java | 19 +++++++++---------- .../resources/mapper/system/SysLogMapper.xml | 2 +- 8 files changed, 32 insertions(+), 34 deletions(-) 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..2851aa9 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,18 @@ 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("Bonus$2024"); +// boolean rest = matchesPassword("Bonus$2024","$2a$10$8JaKSUAU.K.mceU1.YQbd.wP4EJzbrsIscjAwPlfDR7wAWV6s/BGa"); + String msg = Sm4Utils.encrypt("Bonus$2026"); +// boolean rest = Sm4Utils.decrypt("$2a$10$8JaKSUAU.K.mceU1.YQbd.wP4EJzbrsIscjAwPlfDR7wAWV6s/BGa").equals("Bonus$2026"); System.err.println(msg); - System.err.println(rest); +// System.err.println(rest); } } 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..5fd913a 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 @@ -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..23f77df 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 @@ -69,7 +69,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("保存系统日志"); @@ -110,7 +110,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); @@ -273,7 +273,7 @@ public class SysLogServiceImpl implements ISysLogService { Double max=Double.parseDouble(city)*bfb; if(d>=max){ String warningEvent = "日志容量告警,当日日志内存为" +d+ "MB,日志内存超过总内存的90%,请及时处理!"; - eventPublisher.publishEvent(new WaringLogEvent(new SysWarning("0",warningEvent,"",null,null))); + eventPublisher.publishEvent(new WaringLogEvent(new SysWarning("0",warningEvent,"",null,null, "1"))); } }catch (Exception e){ log.error(e.toString(),e); @@ -286,7 +286,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..f53a129 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 @@ -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 From 0cae52d5eea2c47c9ec76e7b7f80c8c80900b0c7 Mon Sep 17 00:00:00 2001 From: weiweiw <14335254+weiweiw22@user.noreply.gitee.com> Date: Tue, 12 Nov 2024 18:31:44 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E5=AF=B9token=E9=87=8C=E9=9D=A2=E7=9A=84us?= =?UTF-8?q?ername=20=E8=BF=9B=E8=A1=8C=E5=8A=A0=E5=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/bonus/common/core/utils/JwtUtils.java | 34 +++- .../core/utils/encryption/Sm4Utils.java | 4 +- .../com/bonus/gateway/filter/IpFilter.java | 184 ------------------ 3 files changed, 31 insertions(+), 191 deletions(-) delete mode 100644 bonus-gateway/src/main/java/com/bonus/gateway/filter/IpFilter.java 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-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; -// } -//} From 6a6d1d4c5e5e251d35a355bd91ea9f773327e08c Mon Sep 17 00:00:00 2001 From: weiweiw <14335254+weiweiw22@user.noreply.gitee.com> Date: Wed, 13 Nov 2024 13:17:35 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E4=BF=AE=E5=A4=8DX-Forwarded-For=20ip?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E4=BC=AA=E9=80=A0=20=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bonus/system/api/domain/SysLogsVo.java | 2 +- .../service/PasswordValidatorService.java | 7 +++--- .../auth/service/SysRecordLogService.java | 17 ++++++++----- .../java/com/bonus/config/SystemConfig.java | 6 +++++ .../bonus/common/core/utils/ip/IpUtils.java | 25 +++++++++++++------ .../bonus/common/log/aspect/LogAspect.java | 9 ++++++- .../bonus/common/security/auth/AuthLogic.java | 5 ++++ .../feign/FeignRequestInterceptor.java | 7 +++++- .../common/security/service/TokenService.java | 3 ++- .../system/controller/SysUserController.java | 2 +- .../service/impl/SysLogServiceImpl.java | 8 ++++-- 11 files changed, 68 insertions(+), 23 deletions(-) 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..81e9734 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(systemConfig.getTrustedProxyIps()); + if (IpUtils.isMatchedIp(blackStr,ip )) { logAndThrowError(username, "访问IP已被列入系统黑名单", "访问IP已被列入系统黑名单"); } } catch (Exception e) { @@ -269,7 +270,7 @@ public class PasswordValidatorService { */ public void handleIpValidation(String username, SysUser user) { try { - String nowIp = IpUtils.getIpAddr(); + String nowIp = IpUtils.getIpAddr(systemConfig.getTrustedProxyIps()); String hisIp = redisService.getCacheObject("IP:" + user.getUserId()); if (!nowIp.equals(hisIp)) { recordLogService.saveErrorLogs(username, System.currentTimeMillis(), user.getUserId().toString(),"用户连续两次在不同IP登录"); @@ -285,7 +286,7 @@ public class PasswordValidatorService { List> cacheList = redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST); // 获取客户端的 IP 地址 - String ip = IpUtils.getIpAddr(); + String ip = IpUtils.getIpAddr(systemConfig.getTrustedProxyIps()); // 遍历黑名单 for (Map map : cacheList) { 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..3945356 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; @@ -29,6 +31,8 @@ public class SysRecordLogService { @Autowired private RemoteLogService remoteLogService; + @Autowired + private SystemConfig systemConfig; /** * 记录登录信息 @@ -42,7 +46,7 @@ public class SysRecordLogService { SysLogininfor logininfor = new SysLogininfor(); logininfor.setUserName(username); - logininfor.setIpaddr(IpUtils.getIpAddr()); + logininfor.setIpaddr(IpUtils.getIpAddr(systemConfig.getTrustedProxyIps())); logininfor.setMsg(message); // 日志状态 if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) @@ -70,7 +74,7 @@ public class SysRecordLogService String uuid= UUID.randomUUID().toString().replace("-","").toUpperCase(); sysLogsVo.setLogId(uuid); sysLogsVo.setOperaUserName(username); - sysLogsVo.setIp(IpUtils.getIpAddr()); + sysLogsVo.setIp(IpUtils.getIpAddr(systemConfig.getTrustedProxyIps())); sysLogsVo.setModel("系统认证模块"); sysLogsVo.setOperTime(DateUtils.getTime()); sysLogsVo.setMethodType(SystemGlobal.POST); @@ -119,6 +123,7 @@ public class SysRecordLogService if (StringUtils.isNotEmpty(userId)){ sysLogsVo.setUserId(userId); } + sysLogsVo.setIp(IpUtils.getIpAddr(systemConfig.getTrustedProxyIps())); sysLogsVo.setResultData("用户登录成功"); sysLogsVo.setTitle("系统登录"); sysLogsVo.setModel("系统认证模块"); @@ -127,7 +132,7 @@ public class SysRecordLogService sysLogsVo.setMethod("login()"); sysLogsVo.setLogId(uuid); sysLogsVo.setOperaUserName(username); - sysLogsVo.setIp(IpUtils.getIpAddr()); + sysLogsVo.setIp(IpUtils.getIpAddr(systemConfig.getTrustedProxyIps())); sysLogsVo.setParams("{\"username\":\""+username+"\"}"); sysLogsVo.setOperateDetail("用户登录系统"); sysLogsVo.setErrType(errMessage); @@ -154,7 +159,7 @@ public class SysRecordLogService String uuid= UUID.randomUUID().toString().replace("-","").toUpperCase(); sysLogsVo.setLogId(uuid); sysLogsVo.setOperaUserName(username); - sysLogsVo.setIp(IpUtils.getIpAddr()); + sysLogsVo.setIp(IpUtils.getIpAddr(systemConfig.getTrustedProxyIps())); sysLogsVo.setModel("系统认证模块"); sysLogsVo.setLogType(0); if (StringUtils.isNotEmpty(userId)){ @@ -195,7 +200,7 @@ public class SysRecordLogService String uuid= UUID.randomUUID().toString().replace("-","").toUpperCase(); sysLogsVo.setLogId(uuid); sysLogsVo.setOperaUserName(username); - sysLogsVo.setIp(IpUtils.getIpAddr()); + sysLogsVo.setIp(IpUtils.getIpAddr(systemConfig.getTrustedProxyIps())); sysLogsVo.setModel("系统认证模块"); sysLogsVo.setLogType(0); if (StringUtils.isNotEmpty(userId)){ @@ -228,7 +233,7 @@ public class SysRecordLogService String uuid= UUID.randomUUID().toString().replace("-","").toUpperCase(); sysLogsVo.setLogId(uuid); sysLogsVo.setOperaUserName(username); - sysLogsVo.setIp(IpUtils.getIpAddr()); + sysLogsVo.setIp(IpUtils.getIpAddr(systemConfig.getTrustedProxyIps())); sysLogsVo.setModel("系统认证模块"); sysLogsVo.setLogType(0); if (StringUtils.isNotEmpty(userId)){ diff --git a/bonus-common/bonus-common-config/src/main/java/com/bonus/config/SystemConfig.java b/bonus-common/bonus-common-config/src/main/java/com/bonus/config/SystemConfig.java index 7a5bdc4..47253f5 100644 --- a/bonus-common/bonus-common-config/src/main/java/com/bonus/config/SystemConfig.java +++ b/bonus-common/bonus-common-config/src/main/java/com/bonus/config/SystemConfig.java @@ -49,6 +49,12 @@ public class SystemConfig { * websocketUrl */ private String websocketurl; + + /** + * 信任的代理ip list + */ + private List trustedProxyIps; + @Data @RefreshScope 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..e068065 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 @@ -2,9 +2,11 @@ package com.bonus.common.core.utils.ip; import java.net.InetAddress; import java.net.UnknownHostException; +import java.util.List; import javax.servlet.http.HttpServletRequest; import com.bonus.common.core.utils.ServletUtils; import com.bonus.common.core.utils.StringUtils; +import org.springframework.util.ObjectUtils; /** * 获取IP方法 @@ -35,9 +37,9 @@ public class IpUtils * * @return IP地址 */ - public static String getIpAddr() + public static String getIpAddr(List trustedProxy) { - return getIpAddr(ServletUtils.getRequest()); + return getIpAddr(ServletUtils.getRequest(), trustedProxy); } /** @@ -46,7 +48,7 @@ public class IpUtils * @param request 请求对象 * @return IP地址 */ - public static String getIpAddr(HttpServletRequest request) + public static String getIpAddr(HttpServletRequest request,List trustedProxy) { if (request == null) { @@ -70,12 +72,21 @@ public class IpUtils ip = request.getHeader("X-Real-IP"); } - if (ip == null || ip.length() == 0 || IP_UNKNOWN.equalsIgnoreCase(ip)) - { + + if (ip == null || ip.length() == 0 || IP_UNKNOWN.equalsIgnoreCase(ip)){ ip = request.getRemoteAddr(); } - - return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip); + String remoteAddr = request.getRemoteAddr(); + if (!StringUtils.isEmpty(ip) && !StringUtils.isEmpty(remoteAddr) && !ObjectUtils.isEmpty(trustedProxy)) { + //使用代理的情况下确定代理是可信的 + if (trustedProxy.contains(remoteAddr)) { + return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip); + } + } + if (!StringUtils.isEmpty(remoteAddr)) { + return "0:0:0:0:0:0:0:1".equals(remoteAddr) ? "127.0.0.1" : getMultistageReverseProxyIp(remoteAddr); + } + return IP_UNKNOWN; } /** 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..e77aa8b 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; @@ -53,6 +57,9 @@ public class LogAspect @Autowired private AsyncLogService asyncLogService; + @Resource + private SystemConfig systemConfig; + /** * 处理请求前执行 */ @@ -118,7 +125,7 @@ public class LogAspect sysLogsVo.setOperateDetail(controllerLog.details()); } - sysLogsVo.setIp(IpUtils.getIpAddr()); + sysLogsVo.setIp(IpUtils.getIpAddr(systemConfig.getTrustedProxyIps())); // 设置方法名称 String className = joinPoint.getTarget().getClass().getName(); String methodName = joinPoint.getSignature().getName(); 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..39138db 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(systemConfig.getTrustedProxyIps())); 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..16ae0e4 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; @@ -18,6 +21,8 @@ import feign.RequestTemplate; @Component public class FeignRequestInterceptor implements RequestInterceptor { + public SystemConfig systemConfig = SpringUtils.getBean(SystemConfig.class); + @Override public void apply(RequestTemplate requestTemplate) { @@ -48,7 +53,7 @@ public class FeignRequestInterceptor implements RequestInterceptor } // 配置客户端IP - requestTemplate.header("X-Forwarded-For", IpUtils.getIpAddr()); + requestTemplate.header("X-Forwarded-For", IpUtils.getIpAddr(systemConfig.getTrustedProxyIps())); } } } \ No newline at end of file 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..b719143 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; @@ -71,7 +72,7 @@ public class TokenService { loginUser.setToken(token); loginUser.setUserid(userId); loginUser.setUsername(userName); - loginUser.setIpaddr(IpUtils.getIpAddr()); + loginUser.setIpaddr(IpUtils.getIpAddr(systemConfig.getTrustedProxyIps())); refreshToken(loginUser); // Jwt存储信息 Map claimsMap = new HashMap(16); 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 5fd913a..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(); 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 23f77df..c2514e7 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; @@ -47,6 +49,8 @@ public class SysLogServiceImpl implements ISysLogService { @Autowired private ApplicationEventPublisher eventPublisher; + @Autowired + private SystemConfig systemConfig; @Override @Transactional(rollbackFor = Exception.class) @@ -82,9 +86,9 @@ public class SysLogServiceImpl implements ISysLogService { public void saveLogs(SysLogsVo sysLog, HttpServletRequest request) { try{ String loginUuid = IdUtils.fastUUID(); - String ip = IpUtils.getIpAddr(request); - sysLog.setLogId(loginUuid); + String ip = IpUtils.getIpAddr(request, systemConfig.getTrustedProxyIps()); sysLog.setIp(ip); + sysLog.setLogId(loginUuid); sysLog.setGrade("高"); sysLog.setErrType("越权访问"); sysLog.setFailureReason("页面未授权"); From 03e730319e3188a5c2abe2c9e463b8de3e94ffc7 Mon Sep 17 00:00:00 2001 From: weiweiw <14335254+weiweiw22@user.noreply.gitee.com> Date: Wed, 13 Nov 2024 15:22:12 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E4=B8=B2=E9=AA=8C=E8=AF=81=E7=A0=81=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bonus/common/core/utils/ip/IpUtils.java | 4 -- .../bonus/gateway/config/CaptchaConfig.java | 6 ++- .../gateway/config/KaptchaTextCreator.java | 2 +- .../gateway/config/MixedTextCreator.java | 44 +++++++++++++++++++ 4 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 bonus-gateway/src/main/java/com/bonus/gateway/config/MixedTextCreator.java 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 e068065..6f8d391 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 @@ -72,10 +72,6 @@ public class IpUtils ip = request.getHeader("X-Real-IP"); } - - if (ip == null || ip.length() == 0 || IP_UNKNOWN.equalsIgnoreCase(ip)){ - ip = request.getRemoteAddr(); - } String remoteAddr = request.getRemoteAddr(); if (!StringUtils.isEmpty(ip) && !StringUtils.isEmpty(remoteAddr) && !ObjectUtils.isEmpty(trustedProxy)) { //使用代理的情况下确定代理是可信的 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 From 8d668d4d9b627c82f573236b338f0c680f7fe057 Mon Sep 17 00:00:00 2001 From: weiweiw <14335254+weiweiw22@user.noreply.gitee.com> Date: Wed, 13 Nov 2024 17:30:13 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E6=8F=90=E4=BA=A4sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/bns_20240604.sql | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sql/bns_20240604.sql b/sql/bns_20240604.sql index 005cc27..cf57c46 100644 --- a/sql/bns_20240604.sql +++ b/sql/bns_20240604.sql @@ -759,9 +759,12 @@ 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 = '系统日志表' ; +ALTER TABLE sys_logs +ADD COLUMN warning_status CHAR(1) NULL DEFAULT '1' COMMENT '0未处理,1已处理'; -- ------------------------------ -- 21 Records of sys_logs_set -- ------------------------------ From 0f1bff972409173f78b76204821f18585e39e080 Mon Sep 17 00:00:00 2001 From: weiweiw <14335254+weiweiw22@user.noreply.gitee.com> Date: Wed, 13 Nov 2024 17:45:02 +0800 Subject: [PATCH 6/9] =?UTF-8?q?=E5=9B=9E=E6=BB=9A=E5=85=B3=E4=BA=8EIP?= =?UTF-8?q?=E4=BC=AA=E9=80=A0=E4=BB=A3=E7=A0=81=E4=B8=8A=E7=9A=84=E6=94=B9?= =?UTF-8?q?=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/PasswordValidatorService.java | 6 +-- .../auth/service/SysRecordLogService.java | 16 +++---- .../java/com/bonus/config/SystemConfig.java | 6 --- .../bonus/common/core/utils/ip/IpUtils.java | 44 ++++++++----------- .../bonus/common/log/aspect/LogAspect.java | 5 +-- .../bonus/common/security/auth/AuthLogic.java | 2 +- .../feign/FeignRequestInterceptor.java | 4 +- .../common/security/service/TokenService.java | 2 +- .../service/impl/SysLogServiceImpl.java | 4 +- 9 files changed, 34 insertions(+), 55 deletions(-) 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 81e9734..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,7 @@ public class PasswordValidatorService { long startTime = System.currentTimeMillis(); try { String blackStr = Convert.toStr(redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST)); - String ip = IpUtils.getIpAddr(systemConfig.getTrustedProxyIps()); + String ip = IpUtils.getIpAddr(); if (IpUtils.isMatchedIp(blackStr,ip )) { logAndThrowError(username, "访问IP已被列入系统黑名单", "访问IP已被列入系统黑名单"); } @@ -270,7 +270,7 @@ public class PasswordValidatorService { */ public void handleIpValidation(String username, SysUser user) { try { - String nowIp = IpUtils.getIpAddr(systemConfig.getTrustedProxyIps()); + String nowIp = IpUtils.getIpAddr(); String hisIp = redisService.getCacheObject("IP:" + user.getUserId()); if (!nowIp.equals(hisIp)) { recordLogService.saveErrorLogs(username, System.currentTimeMillis(), user.getUserId().toString(),"用户连续两次在不同IP登录"); @@ -286,7 +286,7 @@ public class PasswordValidatorService { List> cacheList = redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST); // 获取客户端的 IP 地址 - String ip = IpUtils.getIpAddr(systemConfig.getTrustedProxyIps()); + String ip = IpUtils.getIpAddr(); // 遍历黑名单 for (Map map : cacheList) { 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 3945356..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 @@ -31,8 +31,6 @@ public class SysRecordLogService { @Autowired private RemoteLogService remoteLogService; - @Autowired - private SystemConfig systemConfig; /** * 记录登录信息 @@ -46,7 +44,7 @@ public class SysRecordLogService { SysLogininfor logininfor = new SysLogininfor(); logininfor.setUserName(username); - logininfor.setIpaddr(IpUtils.getIpAddr(systemConfig.getTrustedProxyIps())); + logininfor.setIpaddr(IpUtils.getIpAddr()); logininfor.setMsg(message); // 日志状态 if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) @@ -74,7 +72,7 @@ public class SysRecordLogService String uuid= UUID.randomUUID().toString().replace("-","").toUpperCase(); sysLogsVo.setLogId(uuid); sysLogsVo.setOperaUserName(username); - sysLogsVo.setIp(IpUtils.getIpAddr(systemConfig.getTrustedProxyIps())); + sysLogsVo.setIp(IpUtils.getIpAddr()); sysLogsVo.setModel("系统认证模块"); sysLogsVo.setOperTime(DateUtils.getTime()); sysLogsVo.setMethodType(SystemGlobal.POST); @@ -123,7 +121,7 @@ public class SysRecordLogService if (StringUtils.isNotEmpty(userId)){ sysLogsVo.setUserId(userId); } - sysLogsVo.setIp(IpUtils.getIpAddr(systemConfig.getTrustedProxyIps())); + sysLogsVo.setIp(IpUtils.getIpAddr()); sysLogsVo.setResultData("用户登录成功"); sysLogsVo.setTitle("系统登录"); sysLogsVo.setModel("系统认证模块"); @@ -132,7 +130,7 @@ public class SysRecordLogService sysLogsVo.setMethod("login()"); sysLogsVo.setLogId(uuid); sysLogsVo.setOperaUserName(username); - sysLogsVo.setIp(IpUtils.getIpAddr(systemConfig.getTrustedProxyIps())); + sysLogsVo.setIp(IpUtils.getIpAddr()); sysLogsVo.setParams("{\"username\":\""+username+"\"}"); sysLogsVo.setOperateDetail("用户登录系统"); sysLogsVo.setErrType(errMessage); @@ -159,7 +157,7 @@ public class SysRecordLogService String uuid= UUID.randomUUID().toString().replace("-","").toUpperCase(); sysLogsVo.setLogId(uuid); sysLogsVo.setOperaUserName(username); - sysLogsVo.setIp(IpUtils.getIpAddr(systemConfig.getTrustedProxyIps())); + sysLogsVo.setIp(IpUtils.getIpAddr()); sysLogsVo.setModel("系统认证模块"); sysLogsVo.setLogType(0); if (StringUtils.isNotEmpty(userId)){ @@ -200,7 +198,7 @@ public class SysRecordLogService String uuid= UUID.randomUUID().toString().replace("-","").toUpperCase(); sysLogsVo.setLogId(uuid); sysLogsVo.setOperaUserName(username); - sysLogsVo.setIp(IpUtils.getIpAddr(systemConfig.getTrustedProxyIps())); + sysLogsVo.setIp(IpUtils.getIpAddr()); sysLogsVo.setModel("系统认证模块"); sysLogsVo.setLogType(0); if (StringUtils.isNotEmpty(userId)){ @@ -233,7 +231,7 @@ public class SysRecordLogService String uuid= UUID.randomUUID().toString().replace("-","").toUpperCase(); sysLogsVo.setLogId(uuid); sysLogsVo.setOperaUserName(username); - sysLogsVo.setIp(IpUtils.getIpAddr(systemConfig.getTrustedProxyIps())); + sysLogsVo.setIp(IpUtils.getIpAddr()); sysLogsVo.setModel("系统认证模块"); sysLogsVo.setLogType(0); if (StringUtils.isNotEmpty(userId)){ diff --git a/bonus-common/bonus-common-config/src/main/java/com/bonus/config/SystemConfig.java b/bonus-common/bonus-common-config/src/main/java/com/bonus/config/SystemConfig.java index 47253f5..7a5bdc4 100644 --- a/bonus-common/bonus-common-config/src/main/java/com/bonus/config/SystemConfig.java +++ b/bonus-common/bonus-common-config/src/main/java/com/bonus/config/SystemConfig.java @@ -49,12 +49,6 @@ public class SystemConfig { * websocketUrl */ private String websocketurl; - - /** - * 信任的代理ip list - */ - private List trustedProxyIps; - @Data @RefreshScope 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 6f8d391..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,16 +1,15 @@ + package com.bonus.common.core.utils.ip; import java.net.InetAddress; import java.net.UnknownHostException; -import java.util.List; import javax.servlet.http.HttpServletRequest; import com.bonus.common.core.utils.ServletUtils; import com.bonus.common.core.utils.StringUtils; -import org.springframework.util.ObjectUtils; /** * 获取IP方法 - * + * * @author bonus */ @@ -34,21 +33,21 @@ public class IpUtils /** * 获取客户端IP - * + * * @return IP地址 */ - public static String getIpAddr(List trustedProxy) + public static String getIpAddr() { - return getIpAddr(ServletUtils.getRequest(), trustedProxy); + return getIpAddr(ServletUtils.getRequest()); } /** * 获取客户端IP - * + * * @param request 请求对象 * @return IP地址 */ - public static String getIpAddr(HttpServletRequest request,List trustedProxy) + public static String getIpAddr(HttpServletRequest request) { if (request == null) { @@ -72,22 +71,17 @@ public class IpUtils ip = request.getHeader("X-Real-IP"); } - String remoteAddr = request.getRemoteAddr(); - if (!StringUtils.isEmpty(ip) && !StringUtils.isEmpty(remoteAddr) && !ObjectUtils.isEmpty(trustedProxy)) { - //使用代理的情况下确定代理是可信的 - if (trustedProxy.contains(remoteAddr)) { - return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip); - } + if (ip == null || ip.length() == 0 || IP_UNKNOWN.equalsIgnoreCase(ip)) + { + ip = request.getRemoteAddr(); } - if (!StringUtils.isEmpty(remoteAddr)) { - return "0:0:0:0:0:0:0:1".equals(remoteAddr) ? "127.0.0.1" : getMultistageReverseProxyIp(remoteAddr); - } - return IP_UNKNOWN; + + return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip); } /** * 检查是否为内部IP地址 - * + * * @param ip IP地址 * @return 结果 */ @@ -99,7 +93,7 @@ public class IpUtils /** * 检查是否为内部IP地址 - * + * * @param addr byte地址 * @return 结果 */ @@ -152,7 +146,7 @@ public class IpUtils /** * 将IPv4地址转换成字节 - * + * * @param text IPv4地址 * @return byte 字节 */ @@ -245,7 +239,7 @@ public class IpUtils /** * 获取IP地址 - * + * * @return 本地IP地址 */ public static String getHostIp() @@ -262,7 +256,7 @@ public class IpUtils /** * 获取主机名 - * + * * @return 本地主机名 */ public static String getHostName() @@ -386,7 +380,7 @@ public class IpUtils /** * 校验ip是否符合过滤串规则 - * + * * @param filter 过滤IP列表,支持后缀'*'通配,支持网段如:`10.10.10.1-10.10.10.99` * @param ip 校验IP地址 * @return boolean 结果 @@ -415,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 e77aa8b..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 @@ -57,9 +57,6 @@ public class LogAspect @Autowired private AsyncLogService asyncLogService; - @Resource - private SystemConfig systemConfig; - /** * 处理请求前执行 */ @@ -125,7 +122,7 @@ public class LogAspect sysLogsVo.setOperateDetail(controllerLog.details()); } - sysLogsVo.setIp(IpUtils.getIpAddr(systemConfig.getTrustedProxyIps())); + sysLogsVo.setIp(IpUtils.getIpAddr()); // 设置方法名称 String className = joinPoint.getTarget().getClass().getName(); String methodName = joinPoint.getSignature().getName(); 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 39138db..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 @@ -184,7 +184,7 @@ public class AuthLogic public void addErrorLogs(ProceedingJoinPoint joinPoint,RequiresPermissions requiresPermissions){ try{ LoginUser loginUser = getLoginUser(); - loginUser.setIpaddr(IpUtils.getIpAddr(systemConfig.getTrustedProxyIps())); + 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 16ae0e4..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 @@ -21,8 +21,6 @@ import feign.RequestTemplate; @Component public class FeignRequestInterceptor implements RequestInterceptor { - public SystemConfig systemConfig = SpringUtils.getBean(SystemConfig.class); - @Override public void apply(RequestTemplate requestTemplate) { @@ -53,7 +51,7 @@ public class FeignRequestInterceptor implements RequestInterceptor } // 配置客户端IP - requestTemplate.header("X-Forwarded-For", IpUtils.getIpAddr(systemConfig.getTrustedProxyIps())); + requestTemplate.header("X-Forwarded-For", IpUtils.getIpAddr()); } } } \ No newline at end of file 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 b719143..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 @@ -72,7 +72,7 @@ public class TokenService { loginUser.setToken(token); loginUser.setUserid(userId); loginUser.setUsername(userName); - loginUser.setIpaddr(IpUtils.getIpAddr(systemConfig.getTrustedProxyIps())); + loginUser.setIpaddr(IpUtils.getIpAddr()); refreshToken(loginUser); // Jwt存储信息 Map claimsMap = new HashMap(16); 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 c2514e7..0e5a548 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 @@ -49,8 +49,6 @@ public class SysLogServiceImpl implements ISysLogService { @Autowired private ApplicationEventPublisher eventPublisher; - @Autowired - private SystemConfig systemConfig; @Override @Transactional(rollbackFor = Exception.class) @@ -86,7 +84,7 @@ public class SysLogServiceImpl implements ISysLogService { public void saveLogs(SysLogsVo sysLog, HttpServletRequest request) { try{ String loginUuid = IdUtils.fastUUID(); - String ip = IpUtils.getIpAddr(request, systemConfig.getTrustedProxyIps()); + String ip = IpUtils.getIpAddr(request); sysLog.setIp(ip); sysLog.setLogId(loginUuid); sysLog.setGrade("高"); From f9a052bec58f7365a63028a261d8e6bbb447631c Mon Sep 17 00:00:00 2001 From: weiweiw <14335254+weiweiw22@user.noreply.gitee.com> Date: Mon, 18 Nov 2024 09:49:37 +0800 Subject: [PATCH 7/9] =?UTF-8?q?=E5=B0=86=E6=97=A5=E5=BF=97=E5=AE=B9?= =?UTF-8?q?=E9=87=8F=E5=8D=95=E4=BD=8D=E4=BF=AE=E6=94=B9=E4=B8=BAGB?= =?UTF-8?q?=EF=BC=8C=E9=BB=98=E8=AE=A4=E5=80=BC=E4=B8=BA1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/utils/global/SystemGlobal.java | 2 +- .../common/security/utils/SecurityUtils.java | 5 +- .../service/impl/SysLogServiceImpl.java | 10 +-- .../resources/mapper/system/SysLogMapper.xml | 2 +- sql/bns_20240604.sql | 81 ++++++------------- sql/bns_202411_patch.sql | 57 +++++++++++++ 6 files changed, 89 insertions(+), 68 deletions(-) create mode 100644 sql/bns_202411_patch.sql 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-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 2851aa9..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 @@ -119,10 +119,9 @@ public class SecurityUtils //$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2 //$2a$10$zvlw3Mu8M.j.MhAChrYwluj88ziX6lVD3AoRrBQpwKMcdIZvKMoR2 // String msg= encryptPassword("Admin@1234"); -// String msg= encryptPassword("Bonus$2024"); + String msg= encryptPassword("15888888888"); // boolean rest = matchesPassword("Bonus$2024","$2a$10$8JaKSUAU.K.mceU1.YQbd.wP4EJzbrsIscjAwPlfDR7wAWV6s/BGa"); - String msg = Sm4Utils.encrypt("Bonus$2026"); -// boolean rest = Sm4Utils.decrypt("$2a$10$8JaKSUAU.K.mceU1.YQbd.wP4EJzbrsIscjAwPlfDR7wAWV6s/BGa").equals("Bonus$2026"); +// String msg = Sm4Utils.encrypt("Bonus$2026"); System.err.println(msg); // System.err.println(rest); } 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 0e5a548..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 @@ -145,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){ @@ -167,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%,请及时处理!"; + String warningEvent = "日志容量告警,当日日志内存为" +d+ "GB,日志内存超过总内存的90%,请及时处理!"; eventPublisher.publishEvent(new WaringLogEvent(new SysWarning("0",warningEvent,"",null,null, "1"))); } }catch (Exception e){ 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 f53a129..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 @@ diff --git a/sql/bns_20240604.sql b/sql/bns_20240604.sql index cf57c46..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角色 -- ---------------------------- @@ -763,8 +762,6 @@ create table sys_logs ( PRIMARY KEY (log_id) USING BTREE ) engine = innodb comment = '系统日志表' ; -ALTER TABLE sys_logs -ADD COLUMN warning_status CHAR(1) NULL DEFAULT '1' COMMENT '0未处理,1已处理'; -- ------------------------------ -- 21 Records of sys_logs_set -- ------------------------------ @@ -773,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..25ecd7c --- /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 `bns-cloud`.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 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_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'); From c5a26c539bae77869d2a2b7d97dc72fe0874c02a Mon Sep 17 00:00:00 2001 From: weiweiw <14335254+weiweiw22@user.noreply.gitee.com> Date: Mon, 18 Nov 2024 09:55:31 +0800 Subject: [PATCH 8/9] =?UTF-8?q?=E5=AE=8C=E5=96=842024.11.patch=20sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/bns_202411_patch.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/bns_202411_patch.sql b/sql/bns_202411_patch.sql index 25ecd7c..35b2453 100644 --- a/sql/bns_202411_patch.sql +++ b/sql/bns_202411_patch.sql @@ -9,7 +9,7 @@ ALTER TABLE sys_dept MODIFY COLUMN email varchar(255) CHARACTER SET utf8mb4 COLL 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 `bns-cloud`.sys_role ADD is_built_in char(1) DEFAULT '1' NULL COMMENT '是否内置0:内置角色,1:非内置角色'; +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已处理'; From 94aea97f1acb6c56560e24876e8df46478029d5f Mon Sep 17 00:00:00 2001 From: weiweiw <14335254+weiweiw22@user.noreply.gitee.com> Date: Mon, 18 Nov 2024 10:20:35 +0800 Subject: [PATCH 9/9] =?UTF-8?q?=E5=AE=8C=E5=96=84patch=20sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/bns_202411_patch.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/bns_202411_patch.sql b/sql/bns_202411_patch.sql index 35b2453..14b2db9 100644 --- a/sql/bns_202411_patch.sql +++ b/sql/bns_202411_patch.sql @@ -27,7 +27,7 @@ create table sys_warning ( 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_time datetime default NULL comment '告警时间', warning_status char(1) default '0' comment '告警状态0未处理,1已处理', primary key (warning_id) ) engine = innodb comment = '报警日志表';