This commit is contained in:
wol
2025-08-10 19:49:54 +08:00
parent f301ea5840
commit 3b7501458a
8 changed files with 34 additions and 24 deletions

View File

@@ -3,7 +3,6 @@ package com.agileboot.admin.customize.aop.accessLog;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.EnumUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.servlet.ServletUtil;
import cn.hutool.json.JSONUtil;
import com.agileboot.common.utils.ServletHolderUtil;
import com.agileboot.infrastructure.user.AuthenticationUtils;
@@ -18,8 +17,8 @@ import org.springframework.validation.BindingResult;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.HandlerMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.util.Collection;
import java.util.Map;
@@ -35,7 +34,7 @@ public class OperationLogModel extends SysOperationLogEntity {
public void fillOperatorInfo() {
// 获取当前的用户
String ip = ServletUtil.getClientIP(request);
String ip = ServletHolderUtil.getClientIp();
setOperatorIp(ip);
SystemLoginUser loginUser = AuthenticationUtils.getSystemLoginUser();
if (loginUser != null) {

View File

@@ -1,7 +1,6 @@
package com.agileboot.admin.customize.async;
import cn.hutool.core.date.DateUtil;
import cn.hutool.extra.servlet.ServletUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.agileboot.common.utils.ServletHolderUtil;
import com.agileboot.common.utils.ip.IpRegionUtil;
@@ -38,7 +37,7 @@ public class AsyncTaskFactory {
ServletHolderUtil.getRequest().getHeader("User-Agent"));
// 获取客户端浏览器
final String browser = userAgent.getBrowser() != null ? userAgent.getBrowser().getName() : "";
final String ip = ServletUtil.getClientIP(ServletHolderUtil.getRequest());
final String ip = ServletHolderUtil.getClientIp();
final String address = IpRegionUtil.getBriefLocationByIp(ip);
// 获取客户端操作系统
final String os = userAgent.getOperatingSystem() != null ? userAgent.getOperatingSystem().getName() : "";

View File

@@ -2,6 +2,7 @@ package com.agileboot.admin.customize.service.login;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
import java.util.Collections;
import com.agileboot.common.exception.ApiException;
import com.agileboot.common.exception.error.ErrorCode;
import com.agileboot.infrastructure.user.web.SystemLoginUser;
@@ -24,7 +25,6 @@ import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.SetUtils;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
@@ -86,7 +86,7 @@ public class UserDetailsServiceImpl implements UserDetailsService {
Set<Long> allMenuIds = allMenus.stream().map(SysMenuEntity::getMenuId).collect(Collectors.toSet());
return new RoleInfo(RoleInfo.ADMIN_ROLE_ID, RoleInfo.ADMIN_ROLE_KEY, DataScopeEnum.ALL, SetUtils.emptySet(),
return new RoleInfo(RoleInfo.ADMIN_ROLE_ID, RoleInfo.ADMIN_ROLE_KEY, DataScopeEnum.ALL, Collections.emptySet(),
RoleInfo.ADMIN_PERMISSIONS, allMenuIds);
}
@@ -104,7 +104,7 @@ public class UserDetailsServiceImpl implements UserDetailsService {
DataScopeEnum dataScopeEnum = BasicEnumUtil.fromValue(DataScopeEnum.class, roleEntity.getDataScope());
Set<Long> deptIdSet = SetUtils.emptySet();
Set<Long> deptIdSet = Collections.emptySet();
if (StrUtil.isNotEmpty(roleEntity.getDeptIdSet())) {
deptIdSet = StrUtil.split(roleEntity.getDeptIdSet(), ",").stream()
.map(Convert::toLong).collect(Collectors.toSet());

View File

@@ -6,8 +6,8 @@ import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
@@ -73,5 +73,24 @@ public class ServletHolderUtil {
}
/**
* 获取客户端IP地址兼容代理头
*/
public static String getClientIp() {
HttpServletRequest request = getRequest();
String xForwardedFor = request.getHeader("X-Forwarded-For");
if (StrUtil.isNotEmpty(xForwardedFor)) {
// 可能存在多个IP取第一个
int commaIndex = xForwardedFor.indexOf(',');
return commaIndex > 0 ? xForwardedFor.substring(0, commaIndex).trim() : xForwardedFor.trim();
}
String realIp = request.getHeader("X-Real-IP");
if (StrUtil.isNotEmpty(realIp)) {
return realIp.trim();
}
return request.getRemoteAddr();
}
}

View File

@@ -1,6 +1,5 @@
package com.agileboot.infrastructure.annotations.ratelimit;
import cn.hutool.extra.servlet.ServletUtil;
import com.agileboot.common.exception.ApiException;
import com.agileboot.common.exception.error.ErrorCode;
import com.agileboot.common.utils.ServletHolderUtil;
@@ -67,7 +66,7 @@ public @interface RateLimit {
IP {
@Override
public String generateCombinedKey(RateLimit rateLimiter) {
String clientIP = ServletUtil.getClientIP(ServletHolderUtil.getRequest());
String clientIP = ServletHolderUtil.getClientIp();
return rateLimiter.key() + clientIP;
}
},

View File

@@ -1,9 +1,6 @@
package com.agileboot.infrastructure.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -22,8 +19,6 @@ public class MyBatisConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
return interceptor;
}

View File

@@ -1,6 +1,5 @@
package com.agileboot.infrastructure.user.base;
import cn.hutool.extra.servlet.ServletUtil;
import com.agileboot.common.utils.ServletHolderUtil;
import com.agileboot.common.utils.ip.IpRegionUtil;
import com.fasterxml.jackson.annotation.JsonIgnore;
@@ -54,7 +53,7 @@ public class BaseLoginUser implements UserDetails {
*/
public void fillLoginInfo() {
UserAgent userAgent = UserAgent.parseUserAgentString(ServletHolderUtil.getRequest().getHeader("User-Agent"));
String ip = ServletUtil.getClientIP(ServletHolderUtil.getRequest());
String ip = ServletHolderUtil.getClientIp();
this.getLoginInfo().setIpAddress(ip);
this.getLoginInfo().setLocation(IpRegionUtil.getBriefLocationByIp(ip));

View File

@@ -1,10 +1,10 @@
package com.agileboot.infrastructure.user.web;
import java.util.Collections;
import java.util.Set;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.collections4.SetUtils;
/**
* @author valarchie
@@ -19,7 +19,7 @@ public class RoleInfo {
public static final String ADMIN_ROLE_KEY = "admin";
public static final String ALL_PERMISSIONS = "*:*:*";
public static final Set<String> ADMIN_PERMISSIONS = SetUtils.hashSet(ALL_PERMISSIONS);
public static final Set<String> ADMIN_PERMISSIONS = Set.of(ALL_PERMISSIONS);
public RoleInfo(Long roleId, String roleKey, DataScopeEnum dataScope, Set<Long> deptIdSet,
@@ -28,8 +28,8 @@ public class RoleInfo {
this.roleKey = roleKey;
this.dataScope = dataScope;
this.deptIdSet = deptIdSet;
this.menuPermissions = menuPermissions != null ? menuPermissions : SetUtils.emptySet();
this.menuIds = menuIds != null ? menuIds : SetUtils.emptySet();
this.menuPermissions = menuPermissions != null ? menuPermissions : Collections.emptySet();
this.menuIds = menuIds != null ? menuIds : Collections.emptySet();
}