Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
X
xyqb-user2
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
head_group
xyqb-user2
Commits
70e1c5c5
Commit
70e1c5c5
authored
Jul 12, 2023
by
王亮
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
finished test login(password and sms)
parent
960c7164
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
108 additions
and
23 deletions
+108
-23
update-20230630.sql
doc/sql/update-20230630.sql
+1
-1
UserController.java
...n/quantgroup/xyqb/controller/external/UserController.java
+2
-2
InnerController.java
...tgroup/xyqb/controller/internal/user/InnerController.java
+1
-1
UserTag.java
src/main/java/cn/quantgroup/xyqb/entity/UserTag.java
+3
-3
UserRegisterParam.java
...main/java/cn/quantgroup/xyqb/model/UserRegisterParam.java
+1
-0
UserRegisterServiceImpl.java
...p/xyqb/service/register/impl/UserRegisterServiceImpl.java
+3
-1
PhonePasswordLoginStrategy.java
...uantgroup/xyqb/service/v2/PhonePasswordLoginStrategy.java
+1
-1
SMSLoginStrategy.java
.../java/cn/quantgroup/xyqb/service/v2/SMSLoginStrategy.java
+4
-4
MD5Utils.java
src/main/java/cn/quantgroup/xyqb/util/MD5Utils.java
+72
-0
PasswordUtil.java
src/main/java/cn/quantgroup/xyqb/util/PasswordUtil.java
+20
-10
No files found.
doc/sql/update-20230630.sql
View file @
70e1c5c5
...
...
@@ -12,7 +12,7 @@ CREATE TABLE `xyqb_user`.`user_info` (
`gender`
TINYINT
(
3
)
NULL
COMMENT
'性别'
,
`email`
VARCHAR
(
45
)
NULL
COMMENT
'邮箱'
,
`qq`
VARCHAR
(
20
)
NULL
COMMENT
'腾讯qq'
,
`n
ick_n
ame`
VARCHAR
(
45
)
NULL
COMMENT
'昵称'
,
`name`
VARCHAR
(
45
)
NULL
COMMENT
'昵称'
,
`photo`
VARCHAR
(
255
)
NULL
COMMENT
'头像地址'
,
`birthday`
DATE
NULL
COMMENT
'生日'
,
`province_id`
INT
NULL
COMMENT
'地址省份id'
,
...
...
src/main/java/cn/quantgroup/xyqb/controller/external/UserController.java
View file @
70e1c5c5
...
...
@@ -474,7 +474,7 @@ public class UserController implements IBaseController {
return
JsonResult
.
buildErrorStateResult
(
"修改密码失败"
,
null
);
}
}
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
);
}
}
...
...
@@ -776,7 +776,7 @@ public class UserController implements IBaseController {
}
}
else
{
//验证密码
if
(!
PasswordUtil
.
validatePassword
(
pass
,
user
.
getPassword
()))
{
if
(!
PasswordUtil
.
validatePassword
(
pass
,
user
.
getPassword
()
,
user
.
getPasswordType
()
))
{
// 向该ipv4添加错误计数器
lockIpv4Service
.
countErrorByIpv4
(
clientIp
);
// 向该phoneNo添加错误计数器
...
...
src/main/java/cn/quantgroup/xyqb/controller/internal/user/InnerController.java
View file @
70e1c5c5
...
...
@@ -844,7 +844,7 @@ public class InnerController implements IBaseController {
}
}
else
{
//验证密码
if
(!
PasswordUtil
.
validatePassword
(
bufPassword
,
user
.
getPassword
()))
{
if
(!
PasswordUtil
.
validatePassword
(
bufPassword
,
user
.
getPassword
()
,
user
.
getPasswordType
()
))
{
return
null
;
}
// 老密码校验后更新新密码加密方式
...
...
src/main/java/cn/quantgroup/xyqb/entity/UserTag.java
View file @
70e1c5c5
package
cn
.
quantgroup
.
xyqb
.
entity
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.*
;
import
javax.persistence.Column
;
import
javax.persistence.Entity
;
...
...
@@ -14,6 +12,8 @@ import java.io.Serializable;
@Entity
@Table
(
name
=
"user_tag"
)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public
class
UserTag
extends
BaseEntity
implements
Serializable
{
@Column
(
name
=
"user_id"
)
private
Long
userId
;
...
...
src/main/java/cn/quantgroup/xyqb/model/UserRegisterParam.java
View file @
70e1c5c5
...
...
@@ -19,6 +19,7 @@ public class UserRegisterParam {
* ======数据部分开始======
*/
private
Long
registerFrom
;
// 注册渠道
private
Integer
tenantId
;
//租户id
private
String
phoneNo
;
// 手机号
private
String
password
;
// 密码
private
String
name
;
// 姓名
...
...
src/main/java/cn/quantgroup/xyqb/service/register/impl/UserRegisterServiceImpl.java
View file @
70e1c5c5
...
...
@@ -66,7 +66,8 @@ public class UserRegisterServiceImpl implements IUserRegisterService {
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
);
if
(
tenantId
==
null
||
tenantId
.
equals
(
TenantUtil
.
TENANT_DEFAULT
))
{
applicationEventPublisher
.
publishEvent
(
new
RegisterEvent
(
this
,
userRegisterParam
));
...
...
@@ -92,6 +93,7 @@ public class UserRegisterServiceImpl implements IUserRegisterService {
User
user
=
new
User
();
user
.
setUuid
(
uuid
);
user
.
setEnable
(
true
);
user
.
setTenantId
(
userRegisterParam
.
getTenantId
());
user
.
setPhoneNo
(
userRegisterParam
.
getPhoneNo
());
user
.
setEncryptedPhoneNo
(
userRegisterParam
.
getPhoneNo
());
Long
registerFrom
=
userRegisterParam
.
getRegisterFrom
();
...
...
src/main/java/cn/quantgroup/xyqb/service/v2/PhonePasswordLoginStrategy.java
View file @
70e1c5c5
...
...
@@ -78,7 +78,7 @@ public class PhonePasswordLoginStrategy implements LoginStrategy {
}
}
else
{
//验证密码
if
(!
PasswordUtil
.
validatePassword
(
phonePasswordLoginParam
.
getPassword
(),
user
.
getPassword
()))
{
if
(!
PasswordUtil
.
validatePassword
(
phonePasswordLoginParam
.
getPassword
(),
user
.
getPassword
()
,
user
.
getPasswordType
()
))
{
// 向该ipv4添加错误计数器
lockIpv4Service
.
countErrorByIpv4
(
sessionStruct
.
getIp
());
// 向该phoneNo添加错误计数器
...
...
src/main/java/cn/quantgroup/xyqb/service/v2/SMSLoginStrategy.java
View file @
70e1c5c5
...
...
@@ -11,7 +11,6 @@ import cn.quantgroup.xyqb.model.LoginBean;
import
cn.quantgroup.xyqb.model.LoginProperties
;
import
cn.quantgroup.xyqb.model.session.SessionStruct
;
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.service.register.IUserRegisterService
;
import
cn.quantgroup.xyqb.service.session.ISessionService
;
...
...
@@ -73,9 +72,10 @@ public class SMSLoginStrategy implements LoginStrategy {
User
user
=
userService
.
findByPhoneWithCache
(
smsLoginParam
.
getPhone
(),
sessionStruct
.
getTenantId
());
//需要返回用户是否首次注册
boolean
register
=
user
==
null
;
if
(
user
!=
null
&&
!
user
.
getEnable
())
{
log
.
info
(
"用户不存在,或者已经注销,phoneNo:{}"
,
smsLoginParam
.
getPhone
());
throw
new
BizException
(
BizExceptionEnum
.
ERROR_OR_ENABLE_ERROR
);
if
(
user
!=
null
)
{
if
(!
user
.
getEnable
())
{
throw
new
BizException
(
BizExceptionEnum
.
ERROR_OR_ENABLE_ERROR
);
}
}
else
{
// Service层会负责发送注册消息到LoanVest
user
=
userRegisterService
.
register
(
sessionStruct
.
getRegisteredFrom
(),
smsLoginParam
.
getPhone
(),
sessionStruct
.
getTenantId
());
...
...
src/main/java/cn/quantgroup/xyqb/util/MD5Utils.java
0 → 100644
View file @
70e1c5c5
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
src/main/java/cn/quantgroup/xyqb/util/PasswordUtil.java
View file @
70e1c5c5
...
...
@@ -6,6 +6,7 @@ import com.google.common.base.Preconditions;
import
org.apache.commons.lang.StringUtils
;
import
java.security.MessageDigest
;
import
java.security.NoSuchAlgorithmException
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.concurrent.ThreadLocalRandom
;
...
...
@@ -30,15 +31,15 @@ public class PasswordUtil {
'<'
,
'='
,
'>'
,
'?'
,
'@'
,
'['
,
'\\'
,
']'
,
'^'
,
'_'
,
'`'
,
'{'
,
'|'
,
'}'
,
'~'
};
public
final
static
String
MD5WithSalt
(
String
s
){
if
(
Objects
.
isNull
(
s
))
{
public
final
static
String
MD5WithSalt
(
String
s
)
{
if
(
Objects
.
isNull
(
s
))
{
return
null
;
}
return
MD5
(
s
.
toLowerCase
()
+
PASSWORD_SALT
);
}
public
final
static
String
MD5
(
String
s
)
{
if
(
Objects
.
isNull
(
s
))
{
if
(
Objects
.
isNull
(
s
))
{
return
null
;
}
try
{
...
...
@@ -80,23 +81,32 @@ public class PasswordUtil {
/**
* 校验密码是否合法 - 不允许空密码
*
* @param password 请求密码
* @param password
请求密码
* @param targetPassword 参照密码
* @return
*/
public
static
boolean
validatePassword
(
String
password
,
String
targetPassword
)
{
if
(
StringUtils
.
isBlank
(
password
)){
return
false
;
public
static
boolean
validatePassword
(
String
password
,
String
targetPassword
,
Integer
passwordType
)
{
if
(
passwordType
==
null
||
passwordType
==
0
)
{
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
)
{
if
(
null
==
info
)
{
return
null
;
}
if
(!
info
.
containsKey
(
Constants
.
PASSWORD
))
{
if
(!
info
.
containsKey
(
Constants
.
PASSWORD
))
{
return
JSON
.
toJSONString
(
info
);
}
String
password
=
info
.
get
(
Constants
.
PASSWORD
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment