Browse Source

ip黑名单管理

master
zhouyl 1 year ago
parent
commit
1f3da61eaa
  1. 5
      tp-common/src/main/java/com/inscloudtech/common/constant/Constants.java
  2. 6
      tp-common/src/main/java/com/inscloudtech/common/encrypt/filter/CryptoFilter.java
  3. 2
      tp-framework/src/main/java/com/inscloudtech/framework/config/ResourcesConfig.java
  4. 37
      tp-framework/src/main/java/com/inscloudtech/framework/interceptor/IpAccessInterceptor.java
  5. 12
      tp-functional/src/main/java/com/inscloudtech/functional/controller/CpuInfoController.java
  6. 112
      tp-functional/src/main/java/com/inscloudtech/functional/controller/IpFilterController.java
  7. 33
      tp-functional/src/main/java/com/inscloudtech/functional/domain/IpFilter.java
  8. 18
      tp-functional/src/main/java/com/inscloudtech/functional/mapper/IpFilterMapper.java
  9. 18
      tp-functional/src/main/java/com/inscloudtech/functional/service/IpFilterService.java
  10. 39
      tp-functional/src/main/java/com/inscloudtech/functional/service/impl/IpFilterServiceImpl.java

5
tp-common/src/main/java/com/inscloudtech/common/constant/Constants.java

@ -76,5 +76,10 @@ public interface Constants {
* 资源映射路径 前缀
*/
String RESOURCE_PREFIX = "/profile";
/**
* ip黑名单
*/
String BLACK_IP_LIST = "blackIpList";
}

6
tp-common/src/main/java/com/inscloudtech/common/encrypt/filter/CryptoFilter.java

@ -1,9 +1,6 @@
package com.inscloudtech.common.encrypt.filter;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReUtil;
import com.inscloudtech.common.constant.HttpStatus;
import com.inscloudtech.common.encrypt.annotation.ApiEncrypt;
import com.inscloudtech.common.encrypt.properties.ApiDecryptProperties;
@ -14,15 +11,12 @@ import org.springframework.http.HttpMethod;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.HandlerExecutionChain;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;
import java.util.Objects;
/**

2
tp-framework/src/main/java/com/inscloudtech/framework/config/ResourcesConfig.java

@ -1,5 +1,6 @@
package com.inscloudtech.framework.config;
import com.inscloudtech.framework.interceptor.IpAccessInterceptor;
import com.inscloudtech.framework.interceptor.PlusWebInvokeTimeInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ -21,6 +22,7 @@ public class ResourcesConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 全局访问性能拦截
registry.addInterceptor(new IpAccessInterceptor());
registry.addInterceptor(new PlusWebInvokeTimeInterceptor());
}

37
tp-framework/src/main/java/com/inscloudtech/framework/interceptor/IpAccessInterceptor.java

@ -0,0 +1,37 @@
package com.inscloudtech.framework.interceptor;
import com.inscloudtech.common.constant.Constants;
import com.inscloudtech.common.utils.ServletUtils;
import com.inscloudtech.common.utils.redis.RedisUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* ip访问拦截
*/
@Component
@Slf4j
public class IpAccessInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String ip = ServletUtils.getClientIP();
List<String> cacheSet = RedisUtils.getCacheList(Constants.BLACK_IP_LIST);
if (cacheSet.contains(ip)) {
// 在黑名单中直接拒绝访问
log.info("ip:{} 在黑名单中拒绝访问.....", ip);
return false;
}
// 验证通过
return true;
}
}

12
tp-functional/src/main/java/com/inscloudtech/functional/controller/CpuInfoController.java

@ -118,12 +118,12 @@ public class CpuInfoController {
}
static String url = "https://cpu.bmcx.com/{}__cpu/";
public static void main(String[] args) {
CpuInfo info = new CpuInfo();
info.setId("5493");
updateByURL(info);
}
//
// public static void main(String[] args) {
// CpuInfo info = new CpuInfo();
// info.setId("5493");
// updateByURL(info);
// }
static void updateByURL(CpuInfo cpuInfo){

112
tp-functional/src/main/java/com/inscloudtech/functional/controller/IpFilterController.java

@ -0,0 +1,112 @@
package com.inscloudtech.functional.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.inscloudtech.common.annotation.Log;
import com.inscloudtech.common.annotation.RepeatSubmit;
import com.inscloudtech.common.core.controller.BaseController;
import com.inscloudtech.common.core.domain.PageQuery;
import com.inscloudtech.common.core.domain.R;
import com.inscloudtech.common.core.page.TableDataInfo;
import com.inscloudtech.common.core.validate.AddGroup;
import com.inscloudtech.common.core.validate.EditGroup;
import com.inscloudtech.common.enums.BusinessType;
import com.inscloudtech.functional.domain.IpFilter;
import com.inscloudtech.functional.service.IpFilterService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
/**
* IP黑名单管理
*
* @author inscloudtech
* @date 2024-09-02
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/functional/ipFilter")
public class IpFilterController extends BaseController {
private final IpFilterService iIpFilterService;
/**
* 分页查询
* @param
* @param
* @return
*/
@GetMapping("/page")
public TableDataInfo<IpFilter> getCpuInfoPage(PageQuery pageQuery, IpFilter filter) {
Page page = new Page();
page.setSize(pageQuery.getPageSize());
page.setCurrent(pageQuery.getPageNum());
Page result = iIpFilterService.page(page, Wrappers.query(filter));
TableDataInfo dataInfo = new TableDataInfo();
dataInfo.setTotal(result.getTotal());
dataInfo.setRows(result.getRecords());
return dataInfo;
}
/**
* 获取IP黑名单管理详细信息
*
* @param id 主键
*/
@SaCheckPermission("system:filter:query")
@GetMapping("/{id}")
public R<IpFilter> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(iIpFilterService.getById(id));
}
/**
* 新增IP黑名单管理
*/
@SaCheckPermission("system:filter:add")
@Log(title = "IP黑名单管理", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R add(@Validated(AddGroup.class) @RequestBody IpFilter bo) {
iIpFilterService.save(bo);
iIpFilterService.updateBlackIpList();
return R.ok();
}
/**
* 修改IP黑名单管理
*/
@SaCheckPermission("system:filter:edit")
@Log(title = "IP黑名单管理", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody IpFilter bo) {
iIpFilterService.updateById(bo);
iIpFilterService.updateBlackIpList();
return R.ok();
}
/**
* 删除IP黑名单管理
*
* @param ids 主键串
*/
@SaCheckPermission("system:filter:remove")
@Log(title = "IP黑名单管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(iIpFilterService.removeByIds(Arrays.asList(ids), true));
}
}

33
tp-functional/src/main/java/com/inscloudtech/functional/domain/IpFilter.java

@ -0,0 +1,33 @@
package com.inscloudtech.functional.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.inscloudtech.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* IP黑名单管理对象 ip_filter
*
* @author inscloudtech
* @date 2024-09-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ip_filter")
public class IpFilter extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 主键
*/
@TableId(value = "id")
private Long id;
/**
* ip
*/
@TableField(condition = SqlCondition.LIKE)
private String ip;
}

18
tp-functional/src/main/java/com/inscloudtech/functional/mapper/IpFilterMapper.java

@ -0,0 +1,18 @@
package com.inscloudtech.functional.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.inscloudtech.functional.domain.CpuInfo;
import com.inscloudtech.functional.domain.IpFilter;
import org.apache.ibatis.annotations.Mapper;
/**
*
* @author zfcf
* @date 2024-08-28
*/
@Mapper
public interface IpFilterMapper extends BaseMapper<IpFilter> {
}

18
tp-functional/src/main/java/com/inscloudtech/functional/service/IpFilterService.java

@ -0,0 +1,18 @@
package com.inscloudtech.functional.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.inscloudtech.functional.domain.IpFilter;
/**
* cpu信息Service接口
* @author zfcf
* @date 2024-08-28
*/
public interface IpFilterService extends IService<IpFilter> {
void updateBlackIpList();
}

39
tp-functional/src/main/java/com/inscloudtech/functional/service/impl/IpFilterServiceImpl.java

@ -0,0 +1,39 @@
package com.inscloudtech.functional.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.inscloudtech.common.constant.Constants;
import com.inscloudtech.common.utils.redis.RedisUtils;
import com.inscloudtech.functional.domain.CpuInfo;
import com.inscloudtech.functional.domain.IpFilter;
import com.inscloudtech.functional.mapper.CpuInfoMapper;
import com.inscloudtech.functional.mapper.IpFilterMapper;
import com.inscloudtech.functional.service.CpuInfoService;
import com.inscloudtech.functional.service.IpFilterService;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.List;
import java.util.Set;
/**
* cpu信息
*
* @author zfcf
* @date 2024-08-28
*/
@Service
public class IpFilterServiceImpl extends ServiceImpl<IpFilterMapper, IpFilter> implements IpFilterService {
@PostConstruct
void init(){
RedisUtils.setCacheList(Constants.BLACK_IP_LIST,this.list());
System.out.println("初始化ip白名单");
}
@Override
public void updateBlackIpList(){
RedisUtils.setCacheList(Constants.BLACK_IP_LIST,this.list());
}
}
Loading…
Cancel
Save