当前位置: 首页 > news >正文

怎样做网站二维码湖南建筑信息平台

怎样做网站二维码,湖南建筑信息平台,网站建设项目验收报告书,如何将自己 做的网站发布网上逻辑:写一个注解,自定义在多少秒内限制访问多少次。 自定义拦截器,对于加了注解的请求,在执行方法前。先检查有没有注解,如果有注解就将请求的ipurl拼接作为key。 查询redis中有没有该key,没有就存入&…

逻辑:写一个注解,自定义在多少秒内限制访问多少次。

自定义拦截器,对于加了注解的请求,在执行方法前。先检查有没有注解,如果有注解就将请求的ip+url拼接作为key。

查询redis中有没有该key,没有就存入(key,1,注解中设置的时间限制,单位)

如果redis有该key,就将原来的value取出+1,

1.自定义注解

import java.lang.annotation.*;
@Inherited
@Documented
@Target({ElementType.FIELD,ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AccessLimit {int limit() default 5;int sec() default 5;
}

2.拦截器

在springboot中自定义拦截器,实现HandlerInterceptor接口。实现三个方法:preHandle()//请求到达controller前

postHandle()//请求到达controller后

afterCompletion()//渲染视图后调用

import com.qcby.xmdemo.annocation.AccessLimit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Component
public class AccessLimitInterceptor implements HandlerInterceptor {@Autowiredprivate RedisTemplate  redisTemplate;@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {if (handler instanceof HandlerMethod) {HandlerMethod handlerMethod = (HandlerMethod) handler;Method method = handlerMethod.getMethod();if (!method.isAnnotationPresent(AccessLimit.class)) {return true;}AccessLimit accessLimit = method.getAnnotation(AccessLimit.class);if (accessLimit == null) {return true;}int limit = accessLimit.limit();int sec = accessLimit.sec();String key = getIpAddr(request) + request.getRequestURI();Integer maxLimit = (Integer) redisTemplate.opsForValue().get(key);if (maxLimit == null) {redisTemplate.opsForValue().set(key, 1, sec, TimeUnit.SECONDS);//set时一定要加过期时间} else if (maxLimit < limit) {redisTemplate.opsForValue().set(key, maxLimit + 1, sec, TimeUnit.SECONDS);} else {output(response, "请求太频繁!");return false;}}return true;}public void output(HttpServletResponse response, String msg) throws IOException {response.setContentType("application/json;charset=UTF-8");ServletOutputStream outputStream = null;try {outputStream = response.getOutputStream();outputStream.write(msg.getBytes("UTF-8"));} catch (IOException e) {e.printStackTrace();} finally {outputStream.flush();outputStream.close();}}@Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {}@Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {}//获取请求ip的方法private static String getIpAddr(HttpServletRequest request) {List<String> ipHeadList = Stream.of("X-Forwarded-For", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "X-Real-IP").collect(Collectors.toList());for (String ipHead : ipHeadList) {if (checkIP(request.getHeader(ipHead))) {return request.getHeader(ipHead).split(",")[0];}}return "0:0:0:0:0:0:0:1".equals(request.getRemoteAddr()) ? "127.0.0.1" : request.getRemoteAddr();}private static boolean checkIP(String ip) {return !(null == ip || 0 == ip.length() || "unknown".equalsIgnoreCase(ip));}}

3.注册拦截器

注册到Spring MVC的拦截器链中。实现WebMvcConfigurer接口并重写addInterceptors()方法来实现。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class InterceptorConfig implements WebMvcConfigurer {@AutowiredAccessLimitInterceptor accessLimitInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(accessLimitInterceptor).addPathPatterns("/**")//拦截所有的路径.excludePathPatterns("/LoginCntroller/login");}
}

4.测试

@Controller
@RequestMapping("/hello")
public class AopController {@ResponseBody@RequestMapping("/index")@AccessLimit(limit = 4,sec = 10)//加上自定义注解即可public String test (HttpServletRequest request, @RequestParam(value = "username",required = false) String userName) {return "hello!";}}
http://www.yayakq.cn/news/181584/

相关文章:

  • php做网站技术方案云主机购买
  • 聊城九洲建设有限公司网站企业网站模板seo
  • 自助下单网站怎么做设计工作室简介
  • 网站域名的作用漯河网页制作
  • ps网站建设教程微信自己怎么弄小程序
  • 南昌建设网站49图库下浏览器
  • 国外物流公司网站模板百度搜索排名优化
  • 秀山网站建设端午节手抄报获奖微信怎么推广
  • 欧亚达网站是哪家公司做的wordpress增加网站网页关键词
  • 河源手机网站制作各类专业网站建设
  • 网站专题策划方案交互设计名词解释
  • 顺义区专业网站制作网站建设重庆网站建设有佳网络
  • 南昌网站建设兼职高德地图有外资背景吗
  • 如何做彩票网站推广图怎么介绍vue做的购物网站项目
  • 上那个网站找手工活做专业做京东网站吗
  • 优化的含义百度seo原理
  • 影楼免费网站建设山西省城乡和建设厅网站
  • 德阳网站优化网站建设和前端开发的区别
  • 怎么给婚恋网站做情感分析贵阳网站制作维护
  • 做网站怎样盈利自适应型网站建设
  • 住房和城乡建设厅门户网站做网站应该注意哪些方面
  • 带艺术感的工作室名字兰州网站搜索优化
  • 在线销售网站设计文献宝山网站建设哪家好
  • 网站的优势网站跳出率高的原因
  • 嘉兴网站如何制作网站建设费如何入账
  • 网站广告链接怎么做速卖通跨境电商平台
  • 山东工程网站建设科技最狂潮
  • 做国外网站的公证要多少钱建立门派
  • 互助县wap网站建设公司信息流广告代理商排名
  • 虚拟主机 多个网站百度大数据分析