Commit 70e1c5c5 authored by 王亮's avatar 王亮

finished test login(password and sms)

parent 960c7164
...@@ -12,7 +12,7 @@ CREATE TABLE `xyqb_user`.`user_info` ( ...@@ -12,7 +12,7 @@ CREATE TABLE `xyqb_user`.`user_info` (
`gender` TINYINT(3) NULL COMMENT '性别', `gender` TINYINT(3) NULL COMMENT '性别',
`email` VARCHAR(45) NULL COMMENT '邮箱', `email` VARCHAR(45) NULL COMMENT '邮箱',
`qq` VARCHAR(20) NULL COMMENT '腾讯qq', `qq` VARCHAR(20) NULL COMMENT '腾讯qq',
`nick_name` VARCHAR(45) NULL COMMENT '昵称', `name` VARCHAR(45) NULL COMMENT '昵称',
`photo` VARCHAR(255) NULL COMMENT '头像地址', `photo` VARCHAR(255) NULL COMMENT '头像地址',
`birthday` DATE NULL COMMENT '生日', `birthday` DATE NULL COMMENT '生日',
`province_id` INT NULL COMMENT '地址省份id', `province_id` INT NULL COMMENT '地址省份id',
......
...@@ -474,7 +474,7 @@ public class UserController implements IBaseController { ...@@ -474,7 +474,7 @@ public class UserController implements IBaseController {
return JsonResult.buildErrorStateResult("修改密码失败", null); return JsonResult.buildErrorStateResult("修改密码失败", null);
} }
} else { } else {
if (StringUtils.isNotBlank(user.getPassword()) && !PasswordUtil.validatePassword(password, user.getPassword())) { if (StringUtils.isNotBlank(user.getPassword()) && !PasswordUtil.validatePassword(password, user.getPassword(),user.getPasswordType())) {
return JsonResult.buildErrorStateResult("修改密码失败", null); return JsonResult.buildErrorStateResult("修改密码失败", null);
} }
} }
...@@ -776,7 +776,7 @@ public class UserController implements IBaseController { ...@@ -776,7 +776,7 @@ public class UserController implements IBaseController {
} }
} else { } else {
//验证密码 //验证密码
if (!PasswordUtil.validatePassword(pass, user.getPassword())) { if (!PasswordUtil.validatePassword(pass, user.getPassword(),user.getPasswordType())) {
// 向该ipv4添加错误计数器 // 向该ipv4添加错误计数器
lockIpv4Service.countErrorByIpv4(clientIp); lockIpv4Service.countErrorByIpv4(clientIp);
// 向该phoneNo添加错误计数器 // 向该phoneNo添加错误计数器
......
...@@ -844,7 +844,7 @@ public class InnerController implements IBaseController { ...@@ -844,7 +844,7 @@ public class InnerController implements IBaseController {
} }
} else { } else {
//验证密码 //验证密码
if (!PasswordUtil.validatePassword(bufPassword, user.getPassword())) { if (!PasswordUtil.validatePassword(bufPassword, user.getPassword(),user.getPasswordType())) {
return null; return null;
} }
// 老密码校验后更新新密码加密方式 // 老密码校验后更新新密码加密方式
......
package cn.quantgroup.xyqb.entity; package cn.quantgroup.xyqb.entity;
import lombok.Builder; import lombok.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
...@@ -14,6 +12,8 @@ import java.io.Serializable; ...@@ -14,6 +12,8 @@ import java.io.Serializable;
@Entity @Entity
@Table(name = "user_tag") @Table(name = "user_tag")
@Builder @Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserTag extends BaseEntity implements Serializable { public class UserTag extends BaseEntity implements Serializable {
@Column(name = "user_id") @Column(name = "user_id")
private Long userId; private Long userId;
......
...@@ -19,6 +19,7 @@ public class UserRegisterParam { ...@@ -19,6 +19,7 @@ public class UserRegisterParam {
* ======数据部分开始====== * ======数据部分开始======
*/ */
private Long registerFrom; // 注册渠道 private Long registerFrom; // 注册渠道
private Integer tenantId; //租户id
private String phoneNo; // 手机号 private String phoneNo; // 手机号
private String password; // 密码 private String password; // 密码
private String name; // 姓名 private String name; // 姓名
......
...@@ -66,7 +66,8 @@ public class UserRegisterServiceImpl implements IUserRegisterService { ...@@ -66,7 +66,8 @@ public class UserRegisterServiceImpl implements IUserRegisterService {
deregisterCheck(phoneNo); deregisterCheck(phoneNo);
UserRegisterParam userRegisterParam = UserRegisterParam.builder().registerFrom(registerFrom).phoneNo(phoneNo).channelId(registerFrom).sendSuccessSms(true).sendAppSms(true).sendSuccessMq(true).build(); UserRegisterParam userRegisterParam = UserRegisterParam.builder().registerFrom(registerFrom).phoneNo(phoneNo).tenantId(tenantId)
.channelId(registerFrom).sendSuccessSms(true).sendAppSms(true).sendSuccessMq(true).build();
User user = saveUser(userRegisterParam); User user = saveUser(userRegisterParam);
if (tenantId == null || tenantId.equals(TenantUtil.TENANT_DEFAULT)) { if (tenantId == null || tenantId.equals(TenantUtil.TENANT_DEFAULT)) {
applicationEventPublisher.publishEvent(new RegisterEvent(this, userRegisterParam)); applicationEventPublisher.publishEvent(new RegisterEvent(this, userRegisterParam));
...@@ -92,6 +93,7 @@ public class UserRegisterServiceImpl implements IUserRegisterService { ...@@ -92,6 +93,7 @@ public class UserRegisterServiceImpl implements IUserRegisterService {
User user = new User(); User user = new User();
user.setUuid(uuid); user.setUuid(uuid);
user.setEnable(true); user.setEnable(true);
user.setTenantId(userRegisterParam.getTenantId());
user.setPhoneNo(userRegisterParam.getPhoneNo()); user.setPhoneNo(userRegisterParam.getPhoneNo());
user.setEncryptedPhoneNo(userRegisterParam.getPhoneNo()); user.setEncryptedPhoneNo(userRegisterParam.getPhoneNo());
Long registerFrom = userRegisterParam.getRegisterFrom(); Long registerFrom = userRegisterParam.getRegisterFrom();
......
...@@ -78,7 +78,7 @@ public class PhonePasswordLoginStrategy implements LoginStrategy { ...@@ -78,7 +78,7 @@ public class PhonePasswordLoginStrategy implements LoginStrategy {
} }
} else { } else {
//验证密码 //验证密码
if (!PasswordUtil.validatePassword(phonePasswordLoginParam.getPassword(), user.getPassword())) { if (!PasswordUtil.validatePassword(phonePasswordLoginParam.getPassword(), user.getPassword(),user.getPasswordType())) {
// 向该ipv4添加错误计数器 // 向该ipv4添加错误计数器
lockIpv4Service.countErrorByIpv4(sessionStruct.getIp()); lockIpv4Service.countErrorByIpv4(sessionStruct.getIp());
// 向该phoneNo添加错误计数器 // 向该phoneNo添加错误计数器
......
...@@ -11,7 +11,6 @@ import cn.quantgroup.xyqb.model.LoginBean; ...@@ -11,7 +11,6 @@ import cn.quantgroup.xyqb.model.LoginBean;
import cn.quantgroup.xyqb.model.LoginProperties; import cn.quantgroup.xyqb.model.LoginProperties;
import cn.quantgroup.xyqb.model.session.SessionStruct; import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.model.v2.login.BaseLoginParam; import cn.quantgroup.xyqb.model.v2.login.BaseLoginParam;
import cn.quantgroup.xyqb.model.v2.login.PhonePasswordLoginParam;
import cn.quantgroup.xyqb.model.v2.login.SMSLoginParam; import cn.quantgroup.xyqb.model.v2.login.SMSLoginParam;
import cn.quantgroup.xyqb.service.register.IUserRegisterService; import cn.quantgroup.xyqb.service.register.IUserRegisterService;
import cn.quantgroup.xyqb.service.session.ISessionService; import cn.quantgroup.xyqb.service.session.ISessionService;
...@@ -73,9 +72,10 @@ public class SMSLoginStrategy implements LoginStrategy { ...@@ -73,9 +72,10 @@ public class SMSLoginStrategy implements LoginStrategy {
User user = userService.findByPhoneWithCache(smsLoginParam.getPhone(), sessionStruct.getTenantId()); User user = userService.findByPhoneWithCache(smsLoginParam.getPhone(), sessionStruct.getTenantId());
//需要返回用户是否首次注册 //需要返回用户是否首次注册
boolean register = user == null; boolean register = user == null;
if (user != null && !user.getEnable()) { if (user != null) {
log.info("用户不存在,或者已经注销,phoneNo:{}", smsLoginParam.getPhone()); if (!user.getEnable()) {
throw new BizException(BizExceptionEnum.ERROR_OR_ENABLE_ERROR); throw new BizException(BizExceptionEnum.ERROR_OR_ENABLE_ERROR);
}
} else { } else {
// Service层会负责发送注册消息到LoanVest // Service层会负责发送注册消息到LoanVest
user = userRegisterService.register(sessionStruct.getRegisteredFrom(), smsLoginParam.getPhone(), sessionStruct.getTenantId()); user = userRegisterService.register(sessionStruct.getRegisteredFrom(), smsLoginParam.getPhone(), sessionStruct.getTenantId());
......
package cn.quantgroup.xyqb.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Utils {
private static final char[] DIGITS_LOWER = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd',
'e', 'f'};
private static final ThreadLocal<MessageDigest> MESSAGE_DIGEST_LOCAL = new ThreadLocal<MessageDigest>() {
@Override
protected MessageDigest initialValue() {
try {
return MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
return null;
}
}
};
/**
* Calculate MD5 hex string.
*
* @param bytes byte arrays
* @return MD5 hex string of input
* @throws NoSuchAlgorithmException if can't load md5 digest spi.
*/
public static String md5Hex(byte[] bytes) throws NoSuchAlgorithmException {
try {
MessageDigest messageDigest = MESSAGE_DIGEST_LOCAL.get();
if (messageDigest != null) {
return encodeHexString(messageDigest.digest(bytes));
}
throw new NoSuchAlgorithmException("MessageDigest get MD5 instance error");
} finally {
MESSAGE_DIGEST_LOCAL.remove();
}
}
/**
* Calculate MD5 hex string with encode charset.
*
* @param value value
* @param encode encode charset of input
* @return MD5 hex string of input
*/
public static String md5Hex(String value, String encode) {
try {
return md5Hex(value.getBytes(encode));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* Convert a byte array into a visible string.
*/
public static String encodeHexString(byte[] bytes) {
int l = bytes.length;
char[] out = new char[l << 1];
for (int i = 0, j = 0; i < l; i++) {
out[j++] = DIGITS_LOWER[(0xF0 & bytes[i]) >>> 4];
out[j++] = DIGITS_LOWER[0x0F & bytes[i]];
}
return new String(out);
}
}
\ No newline at end of file
...@@ -6,6 +6,7 @@ import com.google.common.base.Preconditions; ...@@ -6,6 +6,7 @@ import com.google.common.base.Preconditions;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.ThreadLocalRandom;
...@@ -30,15 +31,15 @@ public class PasswordUtil { ...@@ -30,15 +31,15 @@ public class PasswordUtil {
'<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~' '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~'
}; };
public final static String MD5WithSalt(String s){ public final static String MD5WithSalt(String s) {
if(Objects.isNull(s)){ if (Objects.isNull(s)) {
return null; return null;
} }
return MD5(s.toLowerCase() + PASSWORD_SALT); return MD5(s.toLowerCase() + PASSWORD_SALT);
} }
public final static String MD5(String s) { public final static String MD5(String s) {
if(Objects.isNull(s)){ if (Objects.isNull(s)) {
return null; return null;
} }
try { try {
...@@ -80,23 +81,32 @@ public class PasswordUtil { ...@@ -80,23 +81,32 @@ public class PasswordUtil {
/** /**
* 校验密码是否合法 - 不允许空密码 * 校验密码是否合法 - 不允许空密码
* *
* @param password 请求密码 * @param password 请求密码
* @param targetPassword 参照密码 * @param targetPassword 参照密码
* @return * @return
*/ */
public static boolean validatePassword(String password, String targetPassword) { public static boolean validatePassword(String password, String targetPassword, Integer passwordType) {
if(StringUtils.isBlank(password)){ if (passwordType == null || passwordType == 0) {
return false; if (StringUtils.isBlank(password)) {
return false;
}
String thePassword = MD5WithSalt(password);
return Objects.equals(thePassword, targetPassword);
} else {
try {
return MD5Utils.md5Hex(password.getBytes()).equals(targetPassword);
} catch (NoSuchAlgorithmException exception) {
return false;
}
} }
String thePassword = MD5WithSalt(password);
return Objects.equals(thePassword, targetPassword);
} }
public static String filterPasswordToString(Map<String, String> info) { public static String filterPasswordToString(Map<String, String> info) {
if (null == info) { if (null == info) {
return null; return null;
} }
if(!info.containsKey(Constants.PASSWORD)){ if (!info.containsKey(Constants.PASSWORD)) {
return JSON.toJSONString(info); return JSON.toJSONString(info);
} }
String password = info.get(Constants.PASSWORD); String password = info.get(Constants.PASSWORD);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment