diff --git a/mall-portal/src/main/java/com/macro/mall/portal/config/GlobalCorsConfig.java b/mall-portal/src/main/java/com/macro/mall/portal/config/GlobalCorsConfig.java new file mode 100644 index 0000000..5ec7a05 --- /dev/null +++ b/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); + } +} diff --git a/mall-portal/src/main/java/com/macro/mall/portal/config/MallSecurityConfig.java b/mall-portal/src/main/java/com/macro/mall/portal/config/MallSecurityConfig.java index c3374b1..2a41f9c 100644 --- a/mall-portal/src/main/java/com/macro/mall/portal/config/MallSecurityConfig.java +++ b/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. diff --git a/mall-portal/src/main/java/com/macro/mall/portal/controller/UmsMemberController.java b/mall-portal/src/main/java/com/macro/mall/portal/controller/UmsMemberController.java index 843870e..0056376 100644 --- a/mall-portal/src/main/java/com/macro/mall/portal/controller/UmsMemberController.java +++ b/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 diff --git a/mall-portal/src/main/java/com/macro/mall/portal/service/RedisService.java b/mall-portal/src/main/java/com/macro/mall/portal/service/RedisService.java deleted file mode 100644 index bc1bf81..0000000 --- a/mall-portal/src/main/java/com/macro/mall/portal/service/RedisService.java +++ /dev/null @@ -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); - -} diff --git a/mall-portal/src/main/java/com/macro/mall/portal/service/UmsMemberCacheService.java b/mall-portal/src/main/java/com/macro/mall/portal/service/UmsMemberCacheService.java new file mode 100644 index 0000000..918641a --- /dev/null +++ b/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); +} diff --git a/mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPortalOrderServiceImpl.java b/mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPortalOrderServiceImpl.java index 6c7a33b..f56c4c2 100644 --- a/mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPortalOrderServiceImpl.java +++ b/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())); diff --git a/mall-portal/src/main/java/com/macro/mall/portal/service/impl/RedisServiceImpl.java b/mall-portal/src/main/java/com/macro/mall/portal/service/impl/RedisServiceImpl.java deleted file mode 100644 index 8426397..0000000 --- a/mall-portal/src/main/java/com/macro/mall/portal/service/impl/RedisServiceImpl.java +++ /dev/null @@ -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); - } -} diff --git a/mall-portal/src/main/java/com/macro/mall/portal/service/impl/UmsMemberCacheServiceImpl.java b/mall-portal/src/main/java/com/macro/mall/portal/service/impl/UmsMemberCacheServiceImpl.java new file mode 100644 index 0000000..a969d56 --- /dev/null +++ b/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); + } +} diff --git a/mall-portal/src/main/java/com/macro/mall/portal/service/impl/UmsMemberServiceImpl.java b/mall-portal/src/main/java/com/macro/mall/portal/service/impl/UmsMemberServiceImpl.java index 49ee902..74fbc4b 100644 --- a/mall-portal/src/main/java/com/macro/mall/portal/service/impl/UmsMemberServiceImpl.java +++ b/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 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); } diff --git a/mall-portal/src/main/resources/application-dev.yml b/mall-portal/src/main/resources/application-dev.yml index 40909e2..c6175fa 100644 --- a/mall-portal/src/main/resources/application-dev.yml +++ b/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 diff --git a/mall-portal/src/main/resources/application.yml b/mall-portal/src/main/resources/application.yml index 4b578b8..f217199 100644 --- a/mall-portal/src/main/resources/application.yml +++ b/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: