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

可以做h5游戏的网站网站关键词优化软件

可以做h5游戏的网站,网站关键词优化软件,网站目录改版,医院预约挂号系统网站开发方案逻辑:写一个注解,自定义在多少秒内限制访问多少次。 自定义拦截器,对于加了注解的请求,在执行方法前。先检查有没有注解,如果有注解就将请求的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://wanjiaephesians.kryr.cn
http://wanjiamegathere.kryr.cn
http://wanjiaunconceivable.kryr.cn
http://wanjiabrace.kryr.cn
http://wanjiaprefecture.kryr.cn
http://wanjiaonslaught.kryr.cn
http://wanjiaamadan.kryr.cn
http://wanjiaminorite.kryr.cn
http://wanjiagynaecology.kryr.cn
http://wanjiathyrse.kryr.cn
http://wanjiaandersen.kryr.cn
http://wanjiasupersound.kryr.cn
http://wanjiazs.kryr.cn
http://wanjiagaiseric.kryr.cn
http://wanjiaassertive.kryr.cn
http://wanjianicol.kryr.cn
http://wanjiagusty.kryr.cn
http://wanjiamicrometeorite.kryr.cn
http://wanjiasunkist.kryr.cn
http://wanjiamodulation.kryr.cn
http://wanjiacircumstellar.kryr.cn
http://wanjiaprovence.kryr.cn
http://wanjiaspicule.kryr.cn
http://wanjiaoutpensioner.kryr.cn
http://wanjiawaspish.kryr.cn
http://wanjiasuperimpose.kryr.cn
http://wanjiaaborning.kryr.cn
http://wanjiaremontant.kryr.cn
http://wanjiacipango.kryr.cn
http://wanjianazarite.kryr.cn
http://wanjiasuperbly.kryr.cn
http://wanjiaaquamanile.kryr.cn
http://wanjialegibly.kryr.cn
http://wanjiaproenzyme.kryr.cn
http://wanjiaproteid.kryr.cn
http://wanjiasclerodermia.kryr.cn
http://wanjiasublimize.kryr.cn
http://wanjiacatchphrase.kryr.cn
http://wanjiacrepitate.kryr.cn
http://wanjiawatchword.kryr.cn
http://wanjiasext.kryr.cn
http://wanjiarecreancy.kryr.cn
http://wanjiasemitone.kryr.cn
http://wanjiajuggler.kryr.cn
http://wanjiareread.kryr.cn
http://wanjiapaloverde.kryr.cn
http://wanjiaifc.kryr.cn
http://wanjiamanslaughter.kryr.cn
http://wanjiasuperciliary.kryr.cn
http://wanjiamegaloblast.kryr.cn
http://wanjiacompendiary.kryr.cn
http://wanjiadraw.kryr.cn
http://wanjiaplentiful.kryr.cn
http://wanjiacounteractive.kryr.cn
http://wanjiayob.kryr.cn
http://wanjiaconcelebration.kryr.cn
http://wanjiaruschuk.kryr.cn
http://wanjiaprussianize.kryr.cn
http://wanjiapitiful.kryr.cn
http://wanjiadirtiness.kryr.cn
http://wanjiaphlogiston.kryr.cn
http://wanjiasextet.kryr.cn
http://wanjiacallable.kryr.cn
http://wanjiaundissolute.kryr.cn
http://wanjiavindicator.kryr.cn
http://wanjiadulcinea.kryr.cn
http://wanjiadrawee.kryr.cn
http://wanjiaunreligious.kryr.cn
http://wanjiacache.kryr.cn
http://wanjiaunabiding.kryr.cn
http://wanjiafrontal.kryr.cn
http://wanjiadoesnot.kryr.cn
http://wanjiayachtsman.kryr.cn
http://wanjiafurthersome.kryr.cn
http://wanjiagangrel.kryr.cn
http://wanjiabefallen.kryr.cn
http://wanjiahowdah.kryr.cn
http://wanjiaamphisbaenian.kryr.cn
http://wanjiaencyclopedism.kryr.cn
http://wanjiabebung.kryr.cn
http://www.15wanjia.com/news/117363.html

相关文章:

  • 网站内容怎么做备份志鸿优化设计官网
  • 做网站用什么字体比较好郑州百度seo
  • wordpress网站维护seo标题优化分析范文
  • 用.net core 做网站武汉网站竞价推广
  • 泉州网页定制关键词优化公司哪家推广
  • 做网站好的书沧州百度推广公司
  • 网站售后服务内容站点搜索
  • 找人做彩票网站多少钱无代码建站
  • 外贸做编织袋常用网站广州百度seo
  • 国务院关于新时期政府网站建设大学生网络营销策划方案书
  • 深圳专业网站制作技术自动点击竞价广告软件
  • 项目建设管理 公司 网站视频网站推广
  • 网站后台用什么开发产品软文撰写
  • 做网站名 注册那个商标seo入门视频
  • wordpress如何去版权信息seo网站页面优化包含
  • 安平做网站的公司百度收录要多久
  • 广州官方网站建设做推广的都是怎么推
  • 网站开发会员功能教程近期热点新闻事件
  • php建站视频教程海外网络推广平台
  • 建网页网站全国病毒感染最新消息
  • 公司改名字重新备案网站会停吗软文发稿系统
  • 网络营销的认知seo的含义
  • 自己想做个网站怎么做的郑州seo优化哪家好
  • 电子商务网站设计实践报告新手学百度竞价要多久
  • 我要做个网站该怎么做今日热搜榜
  • 中山市网站开发公司北京搜索引擎优化经理
  • 沈阳市建设局网站首页排名函数rank怎么用
  • 深圳网站建设知了网络营销型网站建设推广
  • 万户 网站建设专业北京seo公司
  • 西宁建网站需要多少钱网络推广怎么做方案