短信接口防刷,限制IP的访问 部分笔记!

启动类的配置:
在这里插入图片描述

 package com.yiliao.springcloud;


import com.yiliao.springcloud.interceptor.BrushProofInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@SpringBootApplication(scanBasePackages = {
    
    "com.cjh.bs","com.yiliao"})
//@SpringBootApplication
@MapperScan("com.yiliao.springcloud.dao")
@EnableEurekaClient
public class OrgMain8002  implements WebMvcConfigurer
{
    
    
    //防刷
    @Bean
    public BrushProofInterceptor brushProofInterceptor(){
    
    
        return  new BrushProofInterceptor();
    }


    //配置登录拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    
    
        //防刷   这是配置防刷的权限 路径
        registry.addInterceptor(brushProofInterceptor())
                .addPathPatterns("/**");
    }
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(OrgMain8002.class,args);
    }
}

返回提示信息的实体类

package util;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Setter
@Getter
@NoArgsConstructor
public class JsonResult<T> {
    
    
    public static final int CODE_SUCCESS = 200;
    public static final String MSG_SUCCESS = "操作成功";
    public static final int CODE_NOLOGIN = 401;
    public static final String MSG_NOLOGIN = "请先登录";

    public static final int CODE_ERROR = 500;
    public static final String MSG_ERROR = "系统异常,请联系管理员";

    public static final int CODE_ERROR_PARAM = 501;  //参数异常

    private int code;  //区分不同结果, 而不再是true或者false
    private String msg;
    private T data;  //除了操作结果之后, 还行携带数据返回
    public JsonResult(int code, String msg, T data){
    
    
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    public static <T> JsonResult success(T data){
    
    
        return new JsonResult(CODE_SUCCESS, MSG_SUCCESS, data);
    }

    public static JsonResult success(){
    
    
        return new JsonResult(CODE_SUCCESS, MSG_SUCCESS, null);
    }

    public static <T>  JsonResult error(int code, String msg, T data){
    
    
        return new JsonResult(code, msg, data);
    }

    public static JsonResult defaultError(){
    
    
        return new JsonResult(CODE_ERROR, MSG_ERROR, null);
    }


    public static JsonResult noLogin() {
    
    
        return new JsonResult(CODE_NOLOGIN, MSG_NOLOGIN, null);
    }
}

package util;

/**
 * 系统常量  缓存短信可用时间
 */
public class Consts {
    
    


    //验证码有效时间
    public static final int READNUMBERVO = 61;  //单位分

    //验证码有效时间
    public static final int VERIFY_CODE_VAI_TIME = 5;  //单位分

    //token有效时间
    public static final int USER_INFO_TOKEN_VAI_TIME = 30;  //单位分
}

BrushProofInterceptor实现类

package com.yiliao.springcloud.interceptor;


import com.P.model.pub.Grid;
import com.alibaba.fastjson.JSON;
import com.cjh.ObjectFactory;
import com.yiliao.springcloud.entities.AsCityVO;
import com.yiliao.springcloud.entities.CommonResult;
import com.yiliao.springcloud.redis.ISecurityRedisService;
import com.yiliao.springcloud.utils.RedisKeys;
import com.yiliao.springcloud.utils.RequestUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;

/**
 * 防刷拦截
 */
public class BrushProofInterceptor implements HandlerInterceptor {
    
    
    @Autowired
    private ISecurityRedisService securityRedisService;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
    
    
        //请求接口:url
        //http://localhost:8080/xxx/xxx
        String url = request.getRequestURI().substring(1);
        //请求ip:
        String ip = RequestUtil.getIPAddress();
        //是否超频率
        String key = RedisKeys.BRUSH_PROOF.join(url, ip);
        if(!securityRedisService.isAllowBrush(key)){
    
    
            //表示已经超频率:
            //比如某个ip频繁出现超频现象, 一些额外的处理黑名单
            response.setContentType("text/json;charset=UTF-8");

            Grid grid = new Grid();
            grid.setSuccess(true);
            String s = ObjectFactory.getGson().toJson(CommonResult.Msg(500, "请勿频繁访问","谢谢咯"));
            response.getWriter().write(s);

            return false;
        }
        return true;
    }
}

用到的部分依赖

 <!--HandlerInterceptor 防刷用到的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--RedisKey 防刷用到的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

猜你喜欢

转载自blog.csdn.net/sqL520lT/article/details/111479429