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