10 changed files with 270 additions and 12 deletions
-
5tp-common/src/main/java/com/inscloudtech/common/constant/Constants.java
-
6tp-common/src/main/java/com/inscloudtech/common/encrypt/filter/CryptoFilter.java
-
2tp-framework/src/main/java/com/inscloudtech/framework/config/ResourcesConfig.java
-
37tp-framework/src/main/java/com/inscloudtech/framework/interceptor/IpAccessInterceptor.java
-
12tp-functional/src/main/java/com/inscloudtech/functional/controller/CpuInfoController.java
-
112tp-functional/src/main/java/com/inscloudtech/functional/controller/IpFilterController.java
-
33tp-functional/src/main/java/com/inscloudtech/functional/domain/IpFilter.java
-
18tp-functional/src/main/java/com/inscloudtech/functional/mapper/IpFilterMapper.java
-
18tp-functional/src/main/java/com/inscloudtech/functional/service/IpFilterService.java
-
39tp-functional/src/main/java/com/inscloudtech/functional/service/impl/IpFilterServiceImpl.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; |
||||
|
} |
||||
|
|
||||
|
} |
@ -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)); |
||||
|
} |
||||
|
} |
@ -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; |
||||
|
|
||||
|
} |
@ -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> { |
||||
|
|
||||
|
} |
@ -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(); |
||||
|
|
||||
|
} |
||||
|
|
@ -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()); |
||||
|
} |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue