Ver código fonte

ip白名单限制

lyhzzz 11 meses atrás
pai
commit
25f0a47c1a

+ 10 - 0
src/main/java/com/fdkankan/openApi/aop/ValidateIp.java

@@ -0,0 +1,10 @@
+package com.fdkankan.openApi.aop;
+
+import java.lang.annotation.*;
+
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface ValidateIp {
+
+}

+ 38 - 0
src/main/java/com/fdkankan/openApi/aop/ValidateIpAOP.java

@@ -0,0 +1,38 @@
+package com.fdkankan.openApi.aop;
+
+import cn.hutool.extra.servlet.ServletUtil;
+import com.fdkankan.openApi.service.system.ITIpWhiteService;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Order(999)
+@Component
+@Aspect
+@Slf4j
+public class ValidateIpAOP {
+
+    @Autowired
+    ITIpWhiteService itIpWhiteService;
+
+
+    @Before("@annotation(validateIp)")
+    public void doBefore(JoinPoint joinPoint, ValidateIp validateIp) {
+        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        HttpServletRequest request = servletRequestAttributes.getRequest();
+
+        String clientIP = ServletUtil.getClientIP(request);
+        log.info("validateIp-访问ip,{}", clientIP);
+        itIpWhiteService.checkIp(clientIP);
+
+    }
+
+}

+ 2 - 1
src/main/java/com/fdkankan/openApi/constant/HttpStatus.java

@@ -7,7 +7,8 @@ package com.fdkankan.openApi.constant;
  */
 public enum HttpStatus {
 
-    COUNT_OVER(10001, "次数已使用完")
+    COUNT_OVER(10001, "次数已使用完"),
+    IP_LIMIT(10002, "非法访问")
    ;
 
     private Integer code;

+ 2 - 0
src/main/java/com/fdkankan/openApi/controller/www/DownSceneController.java

@@ -4,6 +4,7 @@ package com.fdkankan.openApi.controller.www;
 import cn.dev33.satoken.annotation.SaIgnore;
 import com.fdkankan.openApi.aop.RedisLimit;
 import com.fdkankan.openApi.aop.ValidateApi;
+import com.fdkankan.openApi.aop.ValidateIp;
 import com.fdkankan.openApi.service.www.IDownSceneService;
 import com.fdkankan.web.response.ResultData;
 import lombok.extern.slf4j.Slf4j;
@@ -28,6 +29,7 @@ public class DownSceneController {
     @GetMapping("/getSceneOfflinePage/{num}/{type}")
     @RedisLimit(name = "downScene/getSceneOfflinePage", limitCount = 1, period = 30)
     @ValidateApi(method = "downScene:getSceneOfflinePage")
+    @ValidateIp
     public ResultData getSceneOfflinePage(@PathVariable String num,
                                           @PathVariable Integer type)  {
 

+ 43 - 0
src/main/java/com/fdkankan/openApi/entity/system/TIpWhite.java

@@ -0,0 +1,43 @@
+package com.fdkankan.openApi.entity.system;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2024-09-02
+ */
+@Getter
+@Setter
+@TableName("t_ip_white")
+public class TIpWhite implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("ip")
+    private String ip;
+
+    @TableField("tb_status")
+    private Integer tbStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+
+}

+ 2 - 2
src/main/java/com/fdkankan/openApi/generate/AutoGenerate.java

@@ -21,7 +21,7 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir");
 
         generate(path,"openApi", getTables(new String[]{
-                "t_scene_show_content"
+                "t_ip_white"
         }));
 
 //        generate(path,"goods", getTables(new String[]{
@@ -49,7 +49,7 @@ public class AutoGenerate {
 
 
     public static void  generate(String path,String moduleName,  List<String> tables){
-        FastAutoGenerator.create("jdbc:mysql://192.168.0.25:3306/4dkankan_v4",
+        FastAutoGenerator.create("jdbc:mysql://192.168.0.25:3306/4dkankan_open_api",
                 "root","4dkk2023cuikuan%")
                 .globalConfig(builder -> {
                     builder.author("")               //作者

+ 18 - 0
src/main/java/com/fdkankan/openApi/mapper/system/ITIpWhiteMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.openApi.mapper.system;
+
+import com.fdkankan.openApi.entity.system.TIpWhite;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2024-09-02
+ */
+@Mapper
+public interface ITIpWhiteMapper extends BaseMapper<TIpWhite> {
+
+}

+ 17 - 0
src/main/java/com/fdkankan/openApi/service/system/ITIpWhiteService.java

@@ -0,0 +1,17 @@
+package com.fdkankan.openApi.service.system;
+
+import com.fdkankan.openApi.entity.system.TIpWhite;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2024-09-02
+ */
+public interface ITIpWhiteService extends IService<TIpWhite> {
+
+    void checkIp(String clientIP);
+}

+ 35 - 0
src/main/java/com/fdkankan/openApi/service/system/impl/TIpWhiteServiceImpl.java

@@ -0,0 +1,35 @@
+package com.fdkankan.openApi.service.system.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.openApi.constant.HttpStatus;
+import com.fdkankan.openApi.entity.system.TIpWhite;
+import com.fdkankan.openApi.exception.ApiBusinessException;
+import com.fdkankan.openApi.mapper.system.ITIpWhiteMapper;
+import com.fdkankan.openApi.service.system.ITIpWhiteService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2024-09-02
+ */
+@Service
+public class TIpWhiteServiceImpl extends ServiceImpl<ITIpWhiteMapper, TIpWhite> implements ITIpWhiteService {
+
+    @Override
+    public void checkIp(String clientIP) {
+        LambdaQueryWrapper<TIpWhite> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(TIpWhite::getIp,clientIP);
+        List<TIpWhite> list = this.list(wrapper);
+        if(list == null || list.isEmpty()){
+            throw new ApiBusinessException(HttpStatus.IP_LIMIT.code(),HttpStatus.IP_LIMIT.message());
+        }
+    }
+}

+ 5 - 0
src/main/resources/mapper/system/TIpWhiteMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.openApi.mapper.system.ITIpWhiteMapper">
+
+</mapper>