本篇文章為大家展示了怎么在spring boot中限制redis 接口的訪問頻率,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
目前累計服務(wù)客戶上千家,積累了豐富的產(chǎn)品開發(fā)及服務(wù)經(jīng)驗。以網(wǎng)站設(shè)計水平和技術(shù)實力,樹立企業(yè)形象,為客戶提供成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)頁設(shè)計、網(wǎng)絡(luò)營銷、VI設(shè)計、網(wǎng)站改版、漏洞修補等服務(wù)。成都創(chuàng)新互聯(lián)始終以務(wù)實、誠信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過對領(lǐng)先技術(shù)的掌握、對創(chuàng)意設(shè)計的研究、對客戶形象的視覺傳遞、對應(yīng)用系統(tǒng)的結(jié)合,為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進步。生產(chǎn)環(huán)境下可以解決的問題:
1.短信驗證碼請求評率限制(防止抓包短信轟炸)
2.熱點數(shù)據(jù)請求評率限制(防止數(shù)據(jù)庫爆炸)
@Component public class BlackInterceper implements HandlerInterceptor { @Autowired private RedisTemplate<String, Object> redisTemplate; private Logger log = LoggerFactory.getLogger(this.getClass()); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { response.setHeader("Content-type", "text/html;charset=UTF-8"); String token = request.getHeader(Cons.TOKEN.WECHAT); String requestURI = request.getRequestURI(); if (StringUtils.isBlank(token)) { response.setHeader("Content-type", "text/html;charset=UTF-8"); response.getWriter().write(JsonUtils.marshalToString(ReturnResult.build(401, "未授權(quán)"))); return false; } Integer userId = (Integer) redisTemplate.opsForValue().get(Cons.TOKEN.WECHAT + ":" + token); log.error("userId={},訪問了url={},請求ip={}",token,requestURI, IpUtil.getIpAddress(request)); if(redisTemplate.hasKey("black")){ if(redisTemplate.opsForSet().isMember("black", userId)){ response.getWriter().write(JsonUtils.marshalToString(ReturnResult.build(500, "由于存在惡意攻擊你已被限制訪問"))); return false; } } Integer count = (Integer)redisTemplate.opsForValue().get("limit:"+token); if(count==null){ redisTemplate.opsForValue().set("limit:"+token, 1, 60, TimeUnit.SECONDS); return true; }else{ if(count>100 && count<150){ response.getWriter().write(JsonUtils.marshalToString(ReturnResult.build(500, "請求太頻繁,請稍后再試"))); redisTemplate.opsForValue().increment("limit:"+token, 1); return false; }else if(count>=150){ redisTemplate.opsForSet().add("black",userId,2,TimeUnit.DAYS); response.getWriter().write(JsonUtils.marshalToString(ReturnResult.build(500, "請求太頻繁,已經(jīng)被限制訪問"))); //redisTemplate.opsForSet().add("black",token); return false; }else{ redisTemplate.opsForValue().increment("limit:"+token, 1); return true; } } } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // TODO Auto-generated method stub } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // TODO Auto-generated method stub } }
上述內(nèi)容就是怎么在spring boot中限制redis 接口的訪問頻率,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
分享標題:怎么在springboot中限制redis接口的訪問頻率-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://m.rwnh.cn/article22/iiicc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機、云服務(wù)器、品牌網(wǎng)站建設(shè)、微信公眾號、小程序開發(fā)、全網(wǎng)營銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容