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===
+