From 50e893264517129a294d7ec055f7016efb2e41a5 Mon Sep 17 00:00:00 2001 From: zhh Date: Tue, 7 Aug 2018 14:10:33 +0800 Subject: [PATCH] =?UTF-8?q?redis=E5=AE=9E=E7=8E=B0=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E7=A0=81=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 +++-- mall-portal/pom.xml | 10 +++++ .../mall/portal/config/SecurityConfig.java | 12 +++--- .../controller/UmsMemberController.java | 8 +--- .../mall/portal/service/RedisService.java | 28 ++++++++++++++ .../mall/portal/service/UmsMemberService.java | 5 ++- .../portal/service/impl/RedisServiceImpl.java | 38 +++++++++++++++++++ .../service/impl/UmsMemberServiceImpl.java | 38 ++++++++++++++++--- .../src/main/resources/application.properties | 26 +++++++++++++ 9 files changed, 150 insertions(+), 24 deletions(-) create mode 100644 mall-portal/src/main/java/com/macro/mall/portal/service/RedisService.java create mode 100644 mall-portal/src/main/java/com/macro/mall/portal/service/impl/RedisServiceImpl.java diff --git a/README.md b/README.md index d430fb6..9726c52 100644 --- a/README.md +++ b/README.md @@ -50,13 +50,14 @@ JWT登录、注册、获取token | ✔ JTA事务处理 | ✔ 集成单元测试 | ✔ OSS上传功能 | ✔ -SpringSecurity权限管理功能 | Elasticsearch搜索功能 | ✔ -Elasticsearch日志收集功能 | +SpringSecurity权限管理功能 | +HTTPS支持 | ✔ +日志收集功能 | 数字型ID生成 | -HTTPS支持 | 定时任务支持 | RestTemplate服务间调用 | +docker容器化部署 | ### 后台功能 @@ -283,7 +284,7 @@ RestTemplate服务间调用 | - 在线支付选择支付方式:支付宝、微信、银联、ApplePay - 支付完成后修改订单状态为已支付、扣除库存 -#### 会员模块(我的) +#### 会员模块(我的)✔ > **我的关注** diff --git a/mall-portal/pom.xml b/mall-portal/pom.xml index f6381d8..2da6c0d 100644 --- a/mall-portal/pom.xml +++ b/mall-portal/pom.xml @@ -64,6 +64,16 @@ springfox-swagger-ui 2.6.1 + + + org.springframework.boot + spring-boot-starter-cache + + + org.springframework.boot + spring-boot-starter-redis + 1.3.8.RELEASE + diff --git a/mall-portal/src/main/java/com/macro/mall/portal/config/SecurityConfig.java b/mall-portal/src/main/java/com/macro/mall/portal/config/SecurityConfig.java index c8f176f..a77ae45 100644 --- a/mall-portal/src/main/java/com/macro/mall/portal/config/SecurityConfig.java +++ b/mall-portal/src/main/java/com/macro/mall/portal/config/SecurityConfig.java @@ -62,12 +62,12 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { .logoutSuccessHandler(new GoLogoutSuccessHandler()) .invalidateHttpSession(true) .deleteCookies("JSESSIONID") - .and() - .requiresChannel() - .antMatchers("/sso/*") - .requiresSecure() - .anyRequest() - .requiresInsecure() +// .and() +// .requiresChannel() +// .antMatchers("/sso/*") +// .requiresSecure() +// .anyRequest() +// .requiresInsecure() // .and() // .rememberMe() // .tokenValiditySeconds(1800) 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 b88889c..d71e768 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,7 +1,5 @@ package com.macro.mall.portal.controller; -import com.macro.mall.model.UmsMember; -import com.macro.mall.portal.domain.CommonResult; import com.macro.mall.portal.service.UmsMemberService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -30,11 +28,7 @@ public class UmsMemberController { @RequestParam String password, @RequestParam String telephone, @RequestParam String authCode) { - UmsMember member = memberService.register(username, password, telephone, authCode); - if (member != null) { - return new CommonResult().success(member); - } - return new CommonResult().failed(); + return memberService.register(username, password, telephone, authCode); } @ApiOperation("获取验证码") 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 new file mode 100644 index 0000000..3ac8312 --- /dev/null +++ b/mall-portal/src/main/java/com/macro/mall/portal/service/RedisService.java @@ -0,0 +1,28 @@ +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); +} diff --git a/mall-portal/src/main/java/com/macro/mall/portal/service/UmsMemberService.java b/mall-portal/src/main/java/com/macro/mall/portal/service/UmsMemberService.java index 8623ce5..573c701 100644 --- a/mall-portal/src/main/java/com/macro/mall/portal/service/UmsMemberService.java +++ b/mall-portal/src/main/java/com/macro/mall/portal/service/UmsMemberService.java @@ -18,7 +18,7 @@ public interface UmsMemberService { * 用户注册 */ @Transactional - UmsMember register(String username, String password, String telephone, String authCode); + CommonResult register(String username, String password, String telephone, String authCode); /** * 生成验证码 @@ -31,5 +31,8 @@ public interface UmsMemberService { @Transactional CommonResult updatePassword(String telephone, String password, String authCode); + /** + * 获取当前登录会员 + */ UmsMember getCurrentMember(); } 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 new file mode 100644 index 0000000..05aaf8d --- /dev/null +++ b/mall-portal/src/main/java/com/macro/mall/portal/service/impl/RedisServiceImpl.java @@ -0,0 +1,38 @@ +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); + } +} 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 e452376..6b2b45f 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,14 +8,17 @@ import com.macro.mall.model.UmsMemberLevel; import com.macro.mall.model.UmsMemberLevelExample; import com.macro.mall.portal.domain.CommonResult; import com.macro.mall.portal.domain.MemberDetails; +import com.macro.mall.portal.service.RedisService; import com.macro.mall.portal.service.UmsMemberService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.security.authentication.encoding.PasswordEncoder; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; import java.util.Date; import java.util.List; @@ -33,6 +36,12 @@ public class UmsMemberServiceImpl implements UmsMemberService { private UmsMemberLevelMapper memberLevelMapper; @Autowired private PasswordEncoder passwordEncoder; + @Autowired + private RedisService redisService; + @Value("${redis.key.prefix.authCode}") + private String REDIS_KEY_PREFIX_AUTH_CODE; + @Value("${authCode.expire.seconds}") + private Long AUTH_CODE_EXPIRE_SECONDS; @Override public UmsMember getByUsername(String username) { @@ -46,19 +55,23 @@ public class UmsMemberServiceImpl implements UmsMemberService { } @Override - public UmsMember register(String username, String password, String telephone, String authCode) { - // TODO: 2018/8/3 对验证码进行验证 + public CommonResult register(String username, String password, String telephone, String authCode) { + //验证验证码 + if(!verifyAuthCode(authCode,telephone)){ + return new CommonResult().failed("验证码错误"); + } //查询是否已有该用户 UmsMemberExample example = new UmsMemberExample(); example.createCriteria().andUsernameEqualTo(username); example.or(example.createCriteria().andPhoneEqualTo(telephone)); List umsMembers = memberMapper.selectByExample(example); if (!CollectionUtils.isEmpty(umsMembers)) { - return null; + return new CommonResult().failed("该用户已经存在"); } //没有该用户进行添加操作 UmsMember umsMember = new UmsMember(); umsMember.setUsername(username); + umsMember.setPhone(telephone); umsMember.setPassword(passwordEncoder.encodePassword(password, null)); umsMember.setCreateTime(new Date()); umsMember.setStatus(1); @@ -71,7 +84,7 @@ public class UmsMemberServiceImpl implements UmsMemberService { } memberMapper.insert(umsMember); umsMember.setPassword(null); - return umsMember; + return new CommonResult().success("注册成功",null); } @Override @@ -81,7 +94,9 @@ public class UmsMemberServiceImpl implements UmsMemberService { for(int i=0;i<6;i++){ sb.append(random.nextInt(10)); } - // TODO: 2018/8/6 验证码进行存储 + //验证码绑定手机号并存储到redis + redisService.set(REDIS_KEY_PREFIX_AUTH_CODE+telephone,sb.toString()); + redisService.expire(REDIS_KEY_PREFIX_AUTH_CODE+telephone,AUTH_CODE_EXPIRE_SECONDS); return new CommonResult().success("获取验证码成功",sb.toString()); } @@ -93,7 +108,10 @@ public class UmsMemberServiceImpl implements UmsMemberService { if(CollectionUtils.isEmpty(memberList)){ return new CommonResult().failed("该账号不存在"); } - // TODO: 2018/8/6 验证验证码 + //验证验证码 + if(!verifyAuthCode(authCode,telephone)){ + return new CommonResult().failed("验证码错误"); + } UmsMember umsMember = memberList.get(0); umsMember.setPassword(passwordEncoder.encodePassword(password,null)); memberMapper.updateByPrimaryKeySelective(umsMember); @@ -107,5 +125,13 @@ public class UmsMemberServiceImpl implements UmsMemberService { MemberDetails memberDetails = (MemberDetails) auth.getPrincipal(); return memberDetails.getUmsMember(); } + //对输入的验证码进行校验 + private boolean verifyAuthCode(String authCode, String telephone){ + if(StringUtils.isEmpty(authCode)){ + return false; + } + String realAuthCode = redisService.get(REDIS_KEY_PREFIX_AUTH_CODE + telephone); + return authCode.equals(realAuthCode); + } } diff --git a/mall-portal/src/main/resources/application.properties b/mall-portal/src/main/resources/application.properties index dc0c6f2..cb268d1 100644 --- a/mall-portal/src/main/resources/application.properties +++ b/mall-portal/src/main/resources/application.properties @@ -29,3 +29,29 @@ spring.data.mongodb.port=27017 spring.data.mongodb.database=mall-port #===mongodb end=== +#===redis start=== +# RedisݿĬΪ0 +spring.redis.database=0 +# Redisַ +spring.redis.host=localhost +# RedisӶ˿ +spring.redis.port=6379 +# Redis루ĬΪգ +spring.redis.password= +# ӳʹøֵʾûƣ +spring.redis.pool.max-active=8 +# ӳȴʱ䣨ʹøֵʾûƣ +spring.redis.pool.max-wait=-1 +# ӳе +spring.redis.pool.max-idle=8 +# ӳеС +spring.redis.pool.min-idle=0 +# ӳʱʱ䣨룩 +spring.redis.timeout=0 +#===redis end=== + +#===redis custom key start=== +redis.key.prefix.authCode=portal:authCode: +authCode.expire.seconds=90 +#===redis custom key end=== +