添加redis缓存支持
This commit is contained in:
parent
fa0af3188c
commit
092bd90257
@ -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);
|
||||
}
|
||||
}
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
@ -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()));
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -33,7 +33,7 @@ spring:
|
||||
max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
|
||||
max-idle: 8 # 连接池中的最大空闲连接
|
||||
min-idle: 0 # 连接池中的最小空闲连接
|
||||
timeout: 3000ms # 连接超时时间(毫秒)
|
||||
timeout: 1000ms # 连接超时时间(毫秒)
|
||||
|
||||
rabbitmq:
|
||||
host: localhost
|
||||
|
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user