Parcourir la source

添加redis缓存支持

macro il y a 5 ans
Parent
commit
092bd90257

+ 34 - 0
mall-portal/src/main/java/com/macro/mall/portal/config/GlobalCorsConfig.java

@@ -0,0 +1,34 @@
+package com.macro.mall.portal.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
+import org.springframework.web.filter.CorsFilter;
+
+/**
+ * 全局跨域配置
+ * Created by macro on 2019/7/27.
+ */
+@Configuration
+public class GlobalCorsConfig {
+
+    /**
+     * 允许跨域调用的过滤器
+     */
+    @Bean
+    public CorsFilter corsFilter() {
+        CorsConfiguration config = new CorsConfiguration();
+        //允许所有域名进行跨域调用
+        config.addAllowedOrigin("*");
+        //允许跨越发送cookie
+        config.setAllowCredentials(true);
+        //放行全部原始头信息
+        config.addAllowedHeader("*");
+        //允许所有请求方法跨域调用
+        config.addAllowedMethod("*");
+        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+        source.registerCorsConfiguration("/**", config);
+        return new CorsFilter(source);
+    }
+}

+ 6 - 0
mall-portal/src/main/java/com/macro/mall/portal/config/MallSecurityConfig.java

@@ -1,14 +1,20 @@
 package com.macro.mall.portal.config;
 
 import com.macro.mall.portal.service.UmsMemberService;
+import com.macro.mall.security.component.DynamicSecurityService;
 import com.macro.mall.security.config.SecurityConfig;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.security.access.ConfigAttribute;
 import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
 import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
 import org.springframework.security.core.userdetails.UserDetailsService;
 
+import java.util.Collection;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
 /**
  * mall-security模块相关配置
  * Created by macro on 2019/11/5.

+ 13 - 0
mall-portal/src/main/java/com/macro/mall/portal/controller/UmsMemberController.java

@@ -1,6 +1,7 @@
 package com.macro.mall.portal.controller;
 
 import com.macro.mall.common.api.CommonResult;
+import com.macro.mall.model.UmsMember;
 import com.macro.mall.portal.service.UmsMemberService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -13,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.servlet.http.HttpServletRequest;
+import java.security.Principal;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -57,6 +59,17 @@ public class UmsMemberController {
         return CommonResult.success(tokenMap);
     }
 
+    @ApiOperation("获取会员信息")
+    @RequestMapping(value = "/info", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult info(Principal principal) {
+        if(principal==null){
+            return CommonResult.unauthorized(null);
+        }
+        UmsMember member = memberService.getCurrentMember();
+        return CommonResult.success(member);
+    }
+
     @ApiOperation("获取验证码")
     @RequestMapping(value = "/getAuthCode", method = RequestMethod.GET)
     @ResponseBody

+ 0 - 35
mall-portal/src/main/java/com/macro/mall/portal/service/RedisService.java

@@ -1,35 +0,0 @@
-package com.macro.mall.portal.service;
-
-/**
- * redis操作Service,
- * 对象和数组都以json形式进行存储
- * Created by macro on 2018/8/7.
- */
-public interface RedisService {
-    /**
-     * 存储数据
-     */
-    void set(String key, String value);
-
-    /**
-     * 获取数据
-     */
-    String get(String key);
-
-    /**
-     * 设置超期时间
-     */
-    boolean expire(String key, long expire);
-
-    /**
-     * 删除数据
-     */
-    void remove(String key);
-
-    /**
-     * 自增操作
-     * @param delta 自增步长
-     */
-    Long increment(String key, long delta);
-
-}

+ 34 - 0
mall-portal/src/main/java/com/macro/mall/portal/service/UmsMemberCacheService.java

@@ -0,0 +1,34 @@
+package com.macro.mall.portal.service;
+
+import com.macro.mall.model.UmsMember;
+
+/**
+ * 会员信息缓存业务类
+ * Created by macro on 2020/3/14.
+ */
+public interface UmsMemberCacheService {
+    /**
+     * 删除会员用户缓存
+     */
+    void delMember(Long memberId);
+
+    /**
+     * 获取会员用户缓存
+     */
+    UmsMember getMember(String username);
+
+    /**
+     * 设置会员用户缓存
+     */
+    void setMember(UmsMember member);
+
+    /**
+     * 设置验证码
+     */
+    void setAuthCode(String telephone, String authCode);
+
+    /**
+     * 获取验证码
+     */
+    String getAuthCode(String telephone);
+}

+ 7 - 4
mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -9,6 +9,7 @@ import com.macro.mall.portal.dao.PortalOrderItemDao;
 import com.macro.mall.portal.dao.SmsCouponHistoryDao;
 import com.macro.mall.portal.domain.*;
 import com.macro.mall.portal.service.*;
+import com.macro.mall.security.service.RedisService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -47,8 +48,10 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
     private SmsCouponHistoryMapper couponHistoryMapper;
     @Autowired
     private RedisService redisService;
-    @Value("${redis.key.prefix.orderId}")
-    private String REDIS_KEY_PREFIX_ORDER_ID;
+    @Value("${redis.key.orderId}")
+    private String REDIS_KEY_ORDER_ID;
+    @Value("${redis.database}")
+    private String REDIS_DATABASE;
     @Autowired
     private PortalOrderDao portalOrderDao;
     @Autowired
@@ -318,8 +321,8 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
     private String generateOrderSn(OmsOrder order) {
         StringBuilder sb = new StringBuilder();
         String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
-        String key = REDIS_KEY_PREFIX_ORDER_ID + date;
-        Long increment = redisService.increment(key, 1);
+        String key = REDIS_DATABASE+":"+ REDIS_KEY_ORDER_ID + date;
+        Long increment = redisService.incr(key, 1);
         sb.append(date);
         sb.append(String.format("%02d", order.getSourceType()));
         sb.append(String.format("%02d", order.getPayType()));

+ 0 - 43
mall-portal/src/main/java/com/macro/mall/portal/service/impl/RedisServiceImpl.java

@@ -1,43 +0,0 @@
-package com.macro.mall.portal.service.impl;
-
-import com.macro.mall.portal.service.RedisService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.StringRedisTemplate;
-import org.springframework.stereotype.Service;
-
-import java.util.concurrent.TimeUnit;
-
-/**
- * redis操作Service的实现类
- * Created by macro on 2018/8/7.
- */
-@Service
-public class RedisServiceImpl implements RedisService {
-    @Autowired
-    private StringRedisTemplate stringRedisTemplate;
-
-    @Override
-    public void set(String key, String value) {
-        stringRedisTemplate.opsForValue().set(key, value);
-    }
-
-    @Override
-    public String get(String key) {
-        return stringRedisTemplate.opsForValue().get(key);
-    }
-
-    @Override
-    public boolean expire(String key, long expire) {
-        return stringRedisTemplate.expire(key, expire, TimeUnit.SECONDS);
-    }
-
-    @Override
-    public void remove(String key) {
-        stringRedisTemplate.delete(key);
-    }
-
-    @Override
-    public Long increment(String key, long delta) {
-        return stringRedisTemplate.opsForValue().increment(key,delta);
-    }
-}

+ 68 - 0
mall-portal/src/main/java/com/macro/mall/portal/service/impl/UmsMemberCacheServiceImpl.java

@@ -0,0 +1,68 @@
+package com.macro.mall.portal.service.impl;
+
+import com.macro.mall.mapper.UmsMemberMapper;
+import com.macro.mall.model.UmsMember;
+import com.macro.mall.portal.service.UmsMemberCacheService;
+import com.macro.mall.security.annotation.CacheException;
+import com.macro.mall.security.config.RedisConfig;
+import com.macro.mall.security.service.RedisService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+/**
+ * UmsMemberCacheService实现类
+ * Created by macro on 2020/3/14.
+ */
+@Service
+public class UmsMemberCacheServiceImpl implements UmsMemberCacheService {
+    @Autowired
+    private RedisService redisService;
+    @Autowired
+    private UmsMemberMapper memberMapper;
+    @Value("${redis.database}")
+    private String REDIS_DATABASE;
+    @Value("${redis.expire.common}")
+    private Long REDIS_EXPIRE;
+    @Value("${redis.expire.authCode}")
+    private Long REDIS_EXPIRE_AUTH_CODE;
+    @Value("${redis.key.member}")
+    private String REDIS_KEY_MEMBER;
+    @Value("${redis.key.authCode}")
+    private String REDIS_KEY_AUTH_CODE;
+
+    @Override
+    public void delMember(Long memberId) {
+        UmsMember umsMember = memberMapper.selectByPrimaryKey(memberId);
+        if (umsMember != null) {
+            String key = REDIS_DATABASE + ":" + REDIS_KEY_MEMBER + ":" + umsMember.getUsername();
+            redisService.del(key);
+        }
+    }
+
+    @Override
+    public UmsMember getMember(String username) {
+        String key = REDIS_DATABASE + ":" + REDIS_KEY_MEMBER + ":" + username;
+        return (UmsMember) redisService.get(key);
+    }
+
+    @Override
+    public void setMember(UmsMember member) {
+        String key = REDIS_DATABASE + ":" + REDIS_KEY_MEMBER + ":" + member.getUsername();
+        redisService.set(key, member, REDIS_EXPIRE);
+    }
+
+    @CacheException
+    @Override
+    public void setAuthCode(String telephone, String authCode) {
+        String key = REDIS_DATABASE + ":" + REDIS_KEY_AUTH_CODE + ":" + telephone;
+        redisService.set(key,authCode,REDIS_EXPIRE_AUTH_CODE);
+    }
+
+    @CacheException
+    @Override
+    public String getAuthCode(String telephone) {
+        String key = REDIS_DATABASE + ":" + REDIS_KEY_AUTH_CODE + ":" + telephone;
+        return (String) redisService.get(key);
+    }
+}

+ 13 - 9
mall-portal/src/main/java/com/macro/mall/portal/service/impl/UmsMemberServiceImpl.java

@@ -8,7 +8,7 @@ import com.macro.mall.model.UmsMemberExample;
 import com.macro.mall.model.UmsMemberLevel;
 import com.macro.mall.model.UmsMemberLevelExample;
 import com.macro.mall.portal.domain.MemberDetails;
-import com.macro.mall.portal.service.RedisService;
+import com.macro.mall.portal.service.UmsMemberCacheService;
 import com.macro.mall.portal.service.UmsMemberService;
 import com.macro.mall.security.util.JwtTokenUtil;
 import org.slf4j.Logger;
@@ -48,19 +48,23 @@ public class UmsMemberServiceImpl implements UmsMemberService {
     @Autowired
     private UmsMemberLevelMapper memberLevelMapper;
     @Autowired
-    private RedisService redisService;
-    @Value("${redis.key.prefix.authCode}")
+    private UmsMemberCacheService memberCacheService;
+    @Value("${redis.key.authCode}")
     private String REDIS_KEY_PREFIX_AUTH_CODE;
-    @Value("${redis.key.expire.authCode}")
+    @Value("${redis.expire.authCode}")
     private Long AUTH_CODE_EXPIRE_SECONDS;
 
     @Override
     public UmsMember getByUsername(String username) {
+        UmsMember member = memberCacheService.getMember(username);
+        if(member!=null) return member;
         UmsMemberExample example = new UmsMemberExample();
         example.createCriteria().andUsernameEqualTo(username);
         List<UmsMember> memberList = memberMapper.selectByExample(example);
         if (!CollectionUtils.isEmpty(memberList)) {
-            return memberList.get(0);
+            member = memberList.get(0);
+            memberCacheService.setMember(member);
+            return member;
         }
         return null;
     }
@@ -109,9 +113,7 @@ public class UmsMemberServiceImpl implements UmsMemberService {
         for(int i=0;i<6;i++){
             sb.append(random.nextInt(10));
         }
-        //验证码绑定手机号并存储到redis
-        redisService.set(REDIS_KEY_PREFIX_AUTH_CODE+telephone,sb.toString());
-        redisService.expire(REDIS_KEY_PREFIX_AUTH_CODE+telephone,AUTH_CODE_EXPIRE_SECONDS);
+        memberCacheService.setAuthCode(telephone,sb.toString());
         return sb.toString();
     }
 
@@ -130,6 +132,7 @@ public class UmsMemberServiceImpl implements UmsMemberService {
         UmsMember umsMember = memberList.get(0);
         umsMember.setPassword(passwordEncoder.encode(password));
         memberMapper.updateByPrimaryKeySelective(umsMember);
+        memberCacheService.delMember(umsMember.getId());
     }
 
     @Override
@@ -146,6 +149,7 @@ public class UmsMemberServiceImpl implements UmsMemberService {
         record.setId(id);
         record.setIntegration(integration);
         memberMapper.updateByPrimaryKeySelective(record);
+        memberCacheService.delMember(id);
     }
 
     @Override
@@ -185,7 +189,7 @@ public class UmsMemberServiceImpl implements UmsMemberService {
         if(StringUtils.isEmpty(authCode)){
             return false;
         }
-        String realAuthCode = redisService.get(REDIS_KEY_PREFIX_AUTH_CODE + telephone);
+        String realAuthCode = memberCacheService.getAuthCode(telephone);
         return authCode.equals(realAuthCode);
     }
 

+ 1 - 1
mall-portal/src/main/resources/application-dev.yml

@@ -33,7 +33,7 @@ spring:
         max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
         max-idle: 8 # 连接池中的最大空闲连接
         min-idle: 0 # 连接池中的最小空闲连接
-    timeout: 3000ms # 连接超时时间(毫秒)
+    timeout: 1000ms # 连接超时时间(毫秒)
 
   rabbitmq:
     host: localhost

+ 8 - 6
mall-portal/src/main/resources/application.yml

@@ -10,7 +10,7 @@ mybatis:
 jwt:
   tokenHeader: Authorization #JWT存储的请求头
   secret: mall-portal-secret #JWT加解密使用的密钥
-  expiration: 604800 #JWT的超期限时间(60*60*24)
+  expiration: 604800 #JWT的超期限时间(60*60*24*7)
   tokenHead: Bearer  #JWT负载中拿到开头
 
 secure:
@@ -32,12 +32,14 @@ secure:
 
 # 自定义redis key
 redis:
+  database: mall
   key:
-    prefix:
-      authCode: "portal:authCode:"
-      orderId: "portal:orderId:"
-    expire:
-      authCode: 90 # 验证码超期时间
+    authCode: 'ums:authCode'
+    orderId: 'oms:orderId'
+    member: 'ums:member'
+  expire:
+    authCode: 90 # 验证码超期时间
+    common: 86400 # 24小时
 
 # 消息队列定义
 rabbitmq: