<!--redis 依赖--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>#redis配置spring.redis.host = ...spring.redis.port = ... [默认6379]spring.redis.password = [如果你的redis服务器有密码]
@Overridepublic byte[] serialize(@Nullable Integer integer) throws SerializationException {return integer== null ? null : integer.toString().getBytes(StandardCharsets.UTF_8);}@Overridepublic Integer deserialize(@Nullable byte[] bytes) throws SerializationException {return bytes == null ? null : Integer.valueOf(new String(bytes,StandardCharsets.UTF_8));}
@Configurationpublic class RedisConfig {@AutowiredRedisSerializer<Integer> intRedisSerializer;@Bean("intRedisTemplate")public RedisTemplate<String, Integer> IntRedisTemplate(RedisConnectionFactory rcf){RedisTemplate<String, Integer> re = new RedisTemplate();re.setConnectionFactory(rcf);re.setKeySerializer(new StringRedisSerializer());re.setValueSerializer(intRedisSerializer);return re;}}
@Component("httpDetective")public class HttpDetectiveImpl implements HttpDetective {@Autowiredprivate RedisTemplate<String, Integer> intRedisTemplate;/**单位均为毫秒*/private final int RECORD_TIME = 1000;private final int ALLOW_TIMES = 6;private final int REFUSE_TIME = 180000;@Overridepublic boolean inspection(String ip) {Integer times = intRedisTemplate.opsForValue().get(ip);if(times == null){System.out.println("有正常人进入");intRedisTemplate.opsForValue().set(ip, 1, RECORD_TIME, TimeUnit.MILLISECONDS);return true;}else{if(times >= ALLOW_TIMES){System.out.println("认定为入侵行为 拦截访问 并且禁止目标短时间内再次访问并且记录 入侵者ip"+ ip);intRedisTemplate.opsForValue().set(ip, ALLOW_TIMES, REFUSE_TIME, TimeUnit.MILLISECONDS);return false;}else{System.out.println("有可疑人进入. "+times);intRedisTemplate.opsForValue().increment(ip);return true;}}}}
@AutowiredHttpDetective httpDetective;@Beanpublic HandlerInterceptor visitorRegistration(){return new HandlerInterceptor(){@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {return httpDetective.inspection(request.getRemoteAddr());}};}
@Configurationpublic class WebMvcConfig implements WebMvcConfigurer {@ResourceHandlerInterceptor visitorRegistration;@Overridepublic void addInterceptors(InterceptorRegistry registry) {System.out.println("添加拦截器");// TODO Auto-generated method stubregistry.addInterceptor(visitorRegistration)// 拦截路劲.addPathPatterns("/**");}}
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69984164/viewspace-2731701/,如需转载,请注明出处,否则将追究法律责任。