浏览代码

健康信息和图片接口对外访问

yinhao 4 年之前
父节点
当前提交
97f2811a30

+ 46 - 0
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/config/RedisConfigure.java

@@ -0,0 +1,46 @@
+package com.huimv.apiservice.config;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisOperations;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+/**
+ * @author yinhao
+ */
+@Configuration
+public class RedisConfigure {
+
+    @Bean
+    @ConditionalOnClass(RedisOperations.class)
+    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
+        RedisTemplate<String, Object> template = new RedisTemplate<>();
+        template.setConnectionFactory(factory);
+
+        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        mapper.activateDefaultTyping(mapper.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL);
+        jackson2JsonRedisSerializer.setObjectMapper(mapper);
+
+        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
+        // key采用 String的序列化方式
+        template.setKeySerializer(stringRedisSerializer);
+        // hash的 key也采用 String的序列化方式
+        template.setHashKeySerializer(stringRedisSerializer);
+        // value序列化方式采用 jackson
+        template.setValueSerializer(jackson2JsonRedisSerializer);
+        // hash的 value序列化方式采用 jackson
+        template.setHashValueSerializer(jackson2JsonRedisSerializer);
+        template.afterPropertiesSet();
+
+        return template;
+    }
+}

+ 2 - 0
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/controller/PigController.java

@@ -2,6 +2,7 @@ package com.huimv.apiservice.controller;
 
 import com.huimv.apiservice.entity.SleepStatusEntity;
 import com.huimv.apiservice.entity.vo.*;
+import com.huimv.apiservice.limit.annotation.Limit;
 import com.huimv.apiservice.service.PigService;
 import com.huimv.common.utils.R;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -32,6 +33,7 @@ public class PigController {
      * @param pigEarTagNo 耳标号
      * @return
      */
+    @Limit(key = "pig_getPigInfo",name = "pig/getPigInfo",prefix = "apiservice")
     @RequestMapping("/getPigInfo")
     public R getPigInfo(@RequestParam(value = "accessToken", required = false) String accessToken,
                         @RequestParam("pigEarTagNo") String pigEarTagNo) {

+ 0 - 72
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/limit/LimitAspect.java

@@ -1,72 +0,0 @@
-package com.huimv.apiservice.limit;
-
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.annotation.Around;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Pointcut;
-import org.aspectj.lang.reflect.MethodSignature;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Component;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
-* @author  作者 : 小布
-* @version 创建时间 : 2019年6月11日 下午3:57:27 
-* @explain 类说明 : 限制访问次数
-*/
-@Component
-@Order
-@Aspect
-public class LimitAspect {
-
-    private Map limitMap = new HashMap();
-    
-    
-    private static final Logger log = LoggerFactory.getLogger(LimitAspect.class);
-
-    @Pointcut("@annotation(limitKey)")
-    public void limit(LimitKey limitKey) {
-    }
-
-    @Around("limit(limitKey)")
-    public Object aroundLog(ProceedingJoinPoint joinpoint, LimitKey limitKey) throws Throwable {
-        MethodSignature methodSignature = (MethodSignature) joinpoint.getSignature();
-        int frequency = limitKey.frequency();
-        String methodName = limitKey.methodName();
-        String paramKey = limitKey.paramKey();
-        String url = limitKey.url();
-        //入参
-        String[] parameterNames = methodSignature.getParameterNames();
-        Object[] args = joinpoint.getArgs();
-        Object obj = null ;
-        
-        for(int i = 0 ; i < parameterNames.length;i++) {
-            if(parameterNames[i].equals(paramKey)) {
-                obj = args[i];
-                break;
-            }
-        }
-        
-        StringBuffer sb = new StringBuffer();
-        sb.append(url).append("/_").append(methodName).append("_").append(paramKey).append("_").append(obj).append("_key");
-        if(limitMap.get(sb.toString()) == null ) {
-             limitMap.put(sb.toString(),frequency-1);
-        } else {
-             int l = (int) limitMap.get(sb.toString());
-             if(l > 0){
-                 limitMap.put(sb.toString(), --l);
-             } else {
-            	 Map<String, Object> mp = new HashMap<String, Object>();
-             	 mp.put("msg", 50003);//接口超过请求次数
-                 return mp;
-             }
-        }
-        System.err.println("剩余次数:"+limitMap.get(sb.toString())+" 自定义key:"+sb.toString());
-        return joinpoint.proceed();
-    }
-
-}

+ 0 - 34
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/limit/LimitKey.java

@@ -1,34 +0,0 @@
-package com.huimv.apiservice.limit;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/** 
-* @author  作者 : yinhao
-* @version 创建时间 : 2021年4月29日 下午3:54:07
-* @explain 类说明 : 限制访问次数
-*/
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface LimitKey {
-	
-	//方法名称
-	String methodName() default "";
-		
-	//访问次数
-	int frequency() default 10;
-	
-	//业务KEY
-	String paramKey() default "CDPathSta";
-	
-	//请求地址
-	String url() default "";
-	
-	//过期时间
-	long timeout() default 1000;
-		
-}

+ 51 - 0
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/limit/annotation/Limit.java

@@ -0,0 +1,51 @@
+package com.huimv.apiservice.limit.annotation;
+
+import com.huimv.apiservice.limit.enums.LimitType;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * <p>
+ * 业务用注解
+ * </p>
+ * 示例: @Limit(key = "test_list",name = "test/list",prefix = "management")
+ * @author huimv
+ * @since 2021/4/29
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Limit {
+
+    /**
+     * 资源名称,用于描述接口功能
+     */
+    String name() default "";
+
+    /**
+     * 资源 key
+     */
+    String key() default "";
+
+    /**
+     * key prefix
+     */
+    String prefix() default "";
+
+    /**
+     * 时间范围,单位秒
+     */
+    long period() default 60 * 60 * 24L;
+
+    /**
+     * 限制访问次数
+     */
+    long count() default 3L;
+
+    /**
+     * 限制类型
+     */
+    LimitType limitType() default LimitType.IP;
+}

+ 44 - 0
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/limit/aspect/AspectSupport.java

@@ -0,0 +1,44 @@
+package com.huimv.apiservice.limit.aspect;
+
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.reflect.MethodSignature;
+
+import java.lang.reflect.Method;
+
+/**
+ * @author yinhao
+ * 反射获取到当前joinpoint的方法
+ */
+public abstract class AspectSupport {
+
+    Method resolveMethod(ProceedingJoinPoint point) {
+        MethodSignature signature = (MethodSignature)point.getSignature();
+        Class<?> targetClass = point.getTarget().getClass();
+
+        Method method = getDeclaredMethod(targetClass, signature.getName(),
+                signature.getMethod().getParameterTypes());
+        if (method == null) {
+            throw new IllegalStateException("无法解析目标方法: " + signature.getMethod().getName());
+        }
+        return method;
+    }
+
+    /**
+     * 反射获取有参方法
+     * @param clazz clazz
+     * @param name name
+     * @param parameterTypes parameterTypes
+     * @return Method
+     */
+    private Method getDeclaredMethod(Class<?> clazz, String name, Class<?>... parameterTypes) {
+        try {
+            return clazz.getDeclaredMethod(name, parameterTypes);
+        } catch (NoSuchMethodException e) {
+            Class<?> superClass = clazz.getSuperclass();
+            if (superClass != null) {
+                return getDeclaredMethod(superClass, name, parameterTypes);
+            }
+        }
+        return null;
+    }
+}

+ 109 - 0
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/limit/aspect/LimitAspect.java

@@ -0,0 +1,109 @@
+package com.huimv.apiservice.limit.aspect;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+import com.google.common.collect.ImmutableList;
+import com.huimv.apiservice.limit.annotation.Limit;
+import com.huimv.apiservice.limit.enums.LimitType;
+import com.huimv.common.exception.LimitAccessException;
+import com.huimv.common.utils.HttpContextUtil;
+import com.huimv.common.utils.IPUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.script.DefaultRedisScript;
+import org.springframework.data.redis.core.script.RedisScript;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Method;
+
+
+/**
+ * 接口限流
+ *
+ * @author yinhao
+ */
+@Slf4j
+@Aspect
+@Component
+public class LimitAspect extends AspectSupport {
+
+    @Autowired
+    private RedisTemplate<String, Object> redisTemplate;
+
+    @Pointcut("@annotation(com.huimv.apiservice.limit.annotation.Limit)")
+    public void pointcut() {
+    }
+
+    @Around("pointcut()")
+    public Object around(ProceedingJoinPoint point) throws Throwable {
+        // 获取到 HttpServletRequest
+        HttpServletRequest request = HttpContextUtil.getHttpServletRequest();
+        Method method = resolveMethod(point);
+        // 获取到注解
+        Limit limitAnnotation = method.getAnnotation(Limit.class);
+        // CUSTOMER 还是 IP
+        LimitType limitType = limitAnnotation.limitType();
+        // 在 redis 中需要使用这个 name 拼接 key
+        String name = limitAnnotation.name();
+        String key;
+        // 获取客户端ip
+        String ip = IPUtil.getIpAddr(request);
+
+        //long limitPeriod = limitAnnotation.period();
+        //修改过期时间为下一天00:00
+        DateTime current = DateUtil.date();
+        DateTime tomorrow = DateUtil.beginOfDay(DateUtil.offsetDay(current, 1));
+        long expire = DateUtil.between(current, tomorrow, DateUnit.SECOND);
+
+
+        long limitCount = limitAnnotation.count();
+        switch (limitType) {
+            case IP:
+                key = limitAnnotation.key() + ip;
+                break;
+            case CUSTOMER:
+                key = limitAnnotation.key();
+                break;
+            default:
+                key = StringUtils.upperCase(method.getName());
+        }
+        // redis 通过key来区分唯一
+        ImmutableList<String> keys = ImmutableList.of(StringUtils.join(limitAnnotation.prefix() + "_", key));
+        String luaScript = buildLuaScript();
+        RedisScript<Long> redisScript = new DefaultRedisScript<>(luaScript, Long.class);
+        Long count = redisTemplate.execute(redisScript, keys, limitCount, expire);
+        log.info("IP:{} 第 {} 次访问key为 {},描述为 [{}] 的接口", ip, count, keys, name);
+        if (count != null && count.intValue() <= limitCount) {
+            return point.proceed();
+        } else {
+            throw new LimitAccessException("当天可访问次数已达上限!");
+        }
+    }
+
+    /**
+     * 限流脚本 参考redis文档  http://doc.redisfans.com/script/eval.html
+     * 调用的时候不超过阈值,则直接返回并执行计算器自加。
+     *
+     * @return lua脚本
+     */
+    private String buildLuaScript() {
+        return "local c" +
+                "\n c = redis.call('get',KEYS[1])" +
+                "\n if c and tonumber(c) > tonumber(ARGV[1]) then" +
+                "\n return c;" +
+                "\n end" +
+                "\n c = redis.call('incr',KEYS[1])" +
+                "\n if tonumber(c) == 1 then" +
+                "\n redis.call('expire',KEYS[1],ARGV[2])" +
+                "\n end" +
+                "\n return c;";
+    }
+}

+ 19 - 0
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/limit/enums/LimitType.java

@@ -0,0 +1,19 @@
+package com.huimv.apiservice.limit.enums;
+
+/**
+ * <p>
+ * Limit类型枚举
+ * </p>
+ * @author yinhao
+ * @since 2021/4/29 17:22
+ */
+public enum LimitType {
+    /**
+     * 用户名
+     */
+    CUSTOMER,
+    /**
+     *  根据 IP地址限制
+     */
+    IP
+}

+ 107 - 111
huimv-smart-gateway/src/main/java/com/huimv/gateway/filter/TokenSignFilter.java

@@ -1,122 +1,118 @@
-//package com.huimv.gateway.filter;
-//
-//
-//import com.huimv.common.utils.TokenUtil;
-//import com.huimv.gateway.utils.JwtUtils;
-//import io.jsonwebtoken.Claims;
-//import lombok.SneakyThrows;
-//import lombok.extern.slf4j.Slf4j;
-//import org.apache.commons.lang.StringUtils;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.cloud.gateway.filter.GatewayFilterChain;
-//import org.springframework.cloud.gateway.filter.GlobalFilter;
-//import org.springframework.core.Ordered;
-//import org.springframework.core.io.buffer.DataBuffer;
-//import org.springframework.http.HttpHeaders;
-//import org.springframework.http.HttpStatus;
-//import org.springframework.http.server.reactive.ServerHttpRequest;
-//import org.springframework.http.server.reactive.ServerHttpResponse;
-//import org.springframework.stereotype.Component;
-//import org.springframework.util.MultiValueMap;
-//import org.springframework.web.server.ServerWebExchange;
-//import reactor.core.publisher.Flux;
-//import reactor.core.publisher.Mono;
-//import org.apache.commons.codec.binary.Hex;
-//
-//import java.nio.charset.StandardCharsets;
-//import java.security.MessageDigest;
-//import java.util.List;
-//import java.util.Map;
-//
-///**
-// * @Author yinhao
-// * @Date 2021/4/30 18:37
-// * @Description
-// */
-//@Slf4j
-//@Component
-//public class TokenSignFilter implements GlobalFilter, Ordered {
-//
-//    @Autowired
-//    private JwtUtils jwtUtils;
-//
-//
-//
-//    @SneakyThrows
-//    @Override
-//    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
-//
-//
-//
-//        ServerHttpRequest request = exchange.getRequest();
-//        ServerHttpResponse response = exchange.getResponse();
-//
-//
-//        if (request.getURI().getPath().contains("/getToken") ||request.getURI().getPath().contains("/management") ) {
+package com.huimv.gateway.filter;
+
+
+import com.huimv.common.utils.TokenUtil;
+import com.huimv.gateway.utils.JwtUtils;
+import io.jsonwebtoken.Claims;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.cloud.gateway.filter.GlobalFilter;
+import org.springframework.core.Ordered;
+import org.springframework.core.io.buffer.DataBuffer;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.http.server.reactive.ServerHttpResponse;
+import org.springframework.stereotype.Component;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+import org.apache.commons.codec.binary.Hex;
+
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author yinhao
+ * @Date 2021/4/30 18:37
+ * @Description
+ */
+@Slf4j
+@Component
+public class TokenSignFilter implements GlobalFilter, Ordered {
+
+
+    @SneakyThrows
+    @Override
+    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+
+
+
+        ServerHttpRequest request = exchange.getRequest();
+        ServerHttpResponse response = exchange.getResponse();
+
+
+        if (request.getURI().getPath().contains("/getToken") ||request.getURI().getPath().contains("/management") ) {
+            return chain.filter(exchange);
+        }
+
+
+        Map<String,String> requestBody = exchange.getAttribute("cachedRequestBodyObject");
+        String token = requestBody.get("token");
+        if (!TokenUtil.verify(token)){
+            response.setStatusCode(HttpStatus.UNAUTHORIZED);
+            return response.setComplete();
+        }
+
+        String random = requestBody.get("random");
+        String timestamp = requestBody.get("timestamp");
+        String sign = requestBody.get("sign");
+
+        MessageDigest md = MessageDigest.getInstance("MD5");
+        String data = random +";" +timestamp;
+        String oneSign = Hex.encodeHexString(md.digest(data.getBytes(StandardCharsets.UTF_8)));
+        oneSign =oneSign +"HuiMv";
+        String twoSign = Hex.encodeHexString(md.digest(oneSign.getBytes(StandardCharsets.UTF_8)));
+        if (!sign.equals(twoSign)){
+            response.setStatusCode(HttpStatus.UNAUTHORIZED);
+            return response.setComplete();
+        }
+
+
+        //登录接口不参与过滤
+//        if (request.getURI().getPath().contains("/login")) {
 //            return chain.filter(exchange);
 //        }
 //
-//
-//        Map<String,String> requestBody = exchange.getAttribute("cachedRequestBodyObject");
-//        String token = requestBody.get("token");
-//        if (!TokenUtil.verify(token)){
+//        String token = request.getHeaders().getFirst(jwtUtils.getHeader());
+//        if (StringUtils.isEmpty(token)) {
 //            response.setStatusCode(HttpStatus.UNAUTHORIZED);
 //            return response.setComplete();
 //        }
 //
-//        String random = requestBody.get("random");
-//        String timestamp = requestBody.get("timestamp");
-//        String sign = requestBody.get("sign");
+//        try {
+//
+//            Claims claims = jwtUtils.getClaimByToken(token);
+//            if (claims == null || jwtUtils.isTokenExpired(claims.getExpiration())) {
+//                response.setStatusCode(HttpStatus.UNAUTHORIZED);
+//                return response.setComplete();
+//                //throw new RRException(jwtUtils.getHeader() + "失效,请重新登录", HttpStatus.UNAUTHORIZED.value());
+//            }
+//
+//            Long id = Long.parseLong(claims.getSubject());
+//            log.info("find userId: {} from uri: {}", id, request.getURI());
+//            ServerHttpRequest serverHttpRequest = request.mutate().headers(httpHeaders -> httpHeaders.add("userId", id + "")).build();
+//            exchange.mutate().request(serverHttpRequest).build();
 //
-//        MessageDigest md = MessageDigest.getInstance("MD5");
-//        String data = random +";" +timestamp;
-//        String oneSign = Hex.encodeHexString(md.digest(data.getBytes(StandardCharsets.UTF_8)));
-//        oneSign =oneSign +"HuiMv";
-//        String twoSign = Hex.encodeHexString(md.digest(oneSign.getBytes(StandardCharsets.UTF_8)));
-//        if (!sign.equals(twoSign)){
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//            //向客户端返回错误提示信息
 //            response.setStatusCode(HttpStatus.UNAUTHORIZED);
 //            return response.setComplete();
 //        }
-//
-//
-//        //登录接口不参与过滤
-////        if (request.getURI().getPath().contains("/login")) {
-////            return chain.filter(exchange);
-////        }
-////
-////        String token = request.getHeaders().getFirst(jwtUtils.getHeader());
-////        if (StringUtils.isEmpty(token)) {
-////            response.setStatusCode(HttpStatus.UNAUTHORIZED);
-////            return response.setComplete();
-////        }
-////
-////        try {
-////
-////            Claims claims = jwtUtils.getClaimByToken(token);
-////            if (claims == null || jwtUtils.isTokenExpired(claims.getExpiration())) {
-////                response.setStatusCode(HttpStatus.UNAUTHORIZED);
-////                return response.setComplete();
-////                //throw new RRException(jwtUtils.getHeader() + "失效,请重新登录", HttpStatus.UNAUTHORIZED.value());
-////            }
-////
-////            Long id = Long.parseLong(claims.getSubject());
-////            log.info("find userId: {} from uri: {}", id, request.getURI());
-////            ServerHttpRequest serverHttpRequest = request.mutate().headers(httpHeaders -> httpHeaders.add("userId", id + "")).build();
-////            exchange.mutate().request(serverHttpRequest).build();
-////
-////        } catch (Exception e) {
-////            e.printStackTrace();
-////            //向客户端返回错误提示信息
-////            response.setStatusCode(HttpStatus.UNAUTHORIZED);
-////            return response.setComplete();
-////        }
-//
-//        return chain.filter(exchange);
-//    }
-//
-//
-//    @Override
-//    public int getOrder() {
-//        return 0;
-//    }
-//}
+
+        return chain.filter(exchange);
+    }
+
+
+    @Override
+    public int getOrder() {
+        return 0;
+    }
+}

+ 46 - 46
huimv-smart-management/src/main/java/com/huimv/management/config/RedisConfigure.java

@@ -1,46 +1,46 @@
-package com.huimv.management.config;
-
-import com.fasterxml.jackson.annotation.JsonAutoDetect;
-import com.fasterxml.jackson.annotation.PropertyAccessor;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.redis.connection.RedisConnectionFactory;
-import org.springframework.data.redis.core.RedisOperations;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
-import org.springframework.data.redis.serializer.StringRedisSerializer;
-
-/**
- * @author yinhao
- */
-@Configuration
-public class RedisConfigure {
-
-    @Bean
-    @ConditionalOnClass(RedisOperations.class)
-    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
-        RedisTemplate<String, Object> template = new RedisTemplate<>();
-        template.setConnectionFactory(factory);
-
-        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
-        mapper.activateDefaultTyping(mapper.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL);
-        jackson2JsonRedisSerializer.setObjectMapper(mapper);
-
-        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
-        // key采用 String的序列化方式
-        template.setKeySerializer(stringRedisSerializer);
-        // hash的 key也采用 String的序列化方式
-        template.setHashKeySerializer(stringRedisSerializer);
-        // value序列化方式采用 jackson
-        template.setValueSerializer(jackson2JsonRedisSerializer);
-        // hash的 value序列化方式采用 jackson
-        template.setHashValueSerializer(jackson2JsonRedisSerializer);
-        template.afterPropertiesSet();
-
-        return template;
-    }
-}
+//package com.huimv.management.config;
+//
+//import com.fasterxml.jackson.annotation.JsonAutoDetect;
+//import com.fasterxml.jackson.annotation.PropertyAccessor;
+//import com.fasterxml.jackson.databind.ObjectMapper;
+//import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.Configuration;
+//import org.springframework.data.redis.connection.RedisConnectionFactory;
+//import org.springframework.data.redis.core.RedisOperations;
+//import org.springframework.data.redis.core.RedisTemplate;
+//import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+//import org.springframework.data.redis.serializer.StringRedisSerializer;
+//
+///**
+// * @author yinhao
+// */
+//@Configuration
+//public class RedisConfigure {
+//
+//    @Bean
+//    @ConditionalOnClass(RedisOperations.class)
+//    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
+//        RedisTemplate<String, Object> template = new RedisTemplate<>();
+//        template.setConnectionFactory(factory);
+//
+//        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
+//        ObjectMapper mapper = new ObjectMapper();
+//        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+//        mapper.activateDefaultTyping(mapper.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL);
+//        jackson2JsonRedisSerializer.setObjectMapper(mapper);
+//
+//        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
+//        // key采用 String的序列化方式
+//        template.setKeySerializer(stringRedisSerializer);
+//        // hash的 key也采用 String的序列化方式
+//        template.setHashKeySerializer(stringRedisSerializer);
+//        // value序列化方式采用 jackson
+//        template.setValueSerializer(jackson2JsonRedisSerializer);
+//        // hash的 value序列化方式采用 jackson
+//        template.setHashValueSerializer(jackson2JsonRedisSerializer);
+//        template.afterPropertiesSet();
+//
+//        return template;
+//    }
+//}