| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package cn.com.goldenwater.dcproj.intercepter;
- import cn.com.goldenwater.dcproj.utils.ReturnUtils;
- import cn.com.goldenwater.dcproj.utils.UserMsgSectrityUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.stereotype.Component;
- import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.util.concurrent.TimeUnit;
- /**
- *
- * 用于处理请求路径上的用户参数
- * */
- @Component
- public class PathVariableInterceptor extends HandlerInterceptorAdapter {
- @Value("${intercept.enable}")
- public Boolean enterceptEnable;
- private Logger logger = LoggerFactory.getLogger(getClass());
- @Autowired
- private RedisTemplate redisTemplate;
- @Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
- if(enterceptEnable) {
- String phone=request.getParameter("phone");
- if(StringUtils.isBlank(phone) && !UserMsgSectrityUtils.isMobileNO(phone)){
- ReturnUtils.responseFail(response,"手机号信息不能为空",9991);
- return false;
- }
- String blackIp= (String) redisTemplate.opsForValue().get("blackList:"+phone);
- if(phone.equals(blackIp)){
- ReturnUtils.responseFail(response,"检测到该手机号登录过于频繁,可能存在恶意操作,系统已将手机用户暂时列入黑名单,如果疑问,请1小时后再试!",9991);
- return false;
- }
- long startTime= redisTemplate.opsForValue().get(phone+"_time")==null?0L: Long.valueOf(redisTemplate.opsForValue().get(phone+"_time")+"");
- if(startTime==0L){
- redisTemplate.opsForValue().set(phone+"_time",System.currentTimeMillis());
- redisTemplate.opsForValue().set(phone+"_login_count",1);
- }else{
- int count= redisTemplate.opsForValue().get(phone+"_login_count")==null?0: (int) redisTemplate.opsForValue().get(phone+"_login_count");
- if(count<20){
- count=count+1;
- redisTemplate.opsForValue().set(phone+"_login_count",count);
- }else{
- long time=(System.currentTimeMillis()-startTime)/3600000L;
- if(time>1){
- redisTemplate.opsForValue().set(phone+"_login_count",0);
- redisTemplate.opsForValue().set(phone+"_time",0L);
- }else{
- redisTemplate.opsForValue().set("blackList:"+phone,phone,3600000L,TimeUnit.MILLISECONDS);
- ReturnUtils.responseFail(response,"检测到该手机号登录过于频繁,可能存在恶意操作,系统已将手机用户暂时列入黑名单,如果疑问,请1小时后再试!",9991);
- return false;
- }
- }
- }
- }
- return true;
- }
- }
|