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
73cacd05
Commit
73cacd05
authored
Dec 01, 2020
by
董建华
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
验证码超时验证
parent
37d00cb1
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
84 additions
and
8 deletions
+84
-8
Constants.java
src/main/java/cn/quantgroup/xyqb/Constants.java
+12
-0
CaptchaFiniteValidateAdvisor.java
...oup/xyqb/aspect/captcha/CaptchaFiniteValidateAdvisor.java
+5
-0
UserController.java
...n/quantgroup/xyqb/controller/external/UserController.java
+26
-1
ImageCaptchaController.java
...b/controller/external/captcha/ImageCaptchaController.java
+7
-0
SmsController.java
...uantgroup/xyqb/controller/external/sms/SmsController.java
+3
-3
ISmsService.java
...main/java/cn/quantgroup/xyqb/service/sms/ISmsService.java
+14
-0
SmsServiceImpl.java
...a/cn/quantgroup/xyqb/service/sms/impl/SmsServiceImpl.java
+17
-4
No files found.
src/main/java/cn/quantgroup/xyqb/Constants.java
View file @
73cacd05
...
@@ -9,6 +9,10 @@ public interface Constants {
...
@@ -9,6 +9,10 @@ public interface Constants {
// zero fill with 4 chars...
// zero fill with 4 chars...
String
ZERO_FILL_TEMPLATE
=
"%04d"
;
String
ZERO_FILL_TEMPLATE
=
"%04d"
;
String
IMAGE_CAPTCHA_KEY
=
"img_captcha:"
;
String
IMAGE_CAPTCHA_KEY
=
"img_captcha:"
;
/**
* 图形验证码缓存key
*/
String
IMAGE_CAPTCHA_REDIS_CACHE_KEY
=
"redis_cache_img_captcha:"
;
String
REDIS_CAPTCHA_KEY
=
"auth:"
;
String
REDIS_CAPTCHA_KEY
=
"auth:"
;
String
REDIS_PREFIX_VERIFICATION_CODE
=
"verificationCode_"
;
String
REDIS_PREFIX_VERIFICATION_CODE
=
"verificationCode_"
;
//新版短信验证码计数
//新版短信验证码计数
...
@@ -23,6 +27,10 @@ public interface Constants {
...
@@ -23,6 +27,10 @@ public interface Constants {
String
REDIS_VERIFICATION_COUNT
=
"verification_code_count:"
;
String
REDIS_VERIFICATION_COUNT
=
"verification_code_count:"
;
Long
Image_Need_Count
=
3L
;
Long
Image_Need_Count
=
3L
;
Long
VERIFICATION_CODE_FINITE_COUNT
=
3L
;
Long
VERIFICATION_CODE_FINITE_COUNT
=
3L
;
/**
* 第几次验证需要重新获取验证码
*/
Long
VERIFICATION_CODE_FINITE_COUNT_NEW
=
2L
;
String
X_AUTH_TOKEN
=
"x-auth-token"
;
String
X_AUTH_TOKEN
=
"x-auth-token"
;
int
VERIFICATION_LEN
=
2
;
int
VERIFICATION_LEN
=
2
;
...
@@ -161,6 +169,10 @@ public interface Constants {
...
@@ -161,6 +169,10 @@ public interface Constants {
* 密码错误次数过多锁定key前缀
* 密码错误次数过多锁定key前缀
*/
*/
String
PASSWORD_LOCK_PRE
=
"password_error_lock:"
;
String
PASSWORD_LOCK_PRE
=
"password_error_lock:"
;
/**
* 图形验证码有效期
*/
Long
IMAGE_CAPTCHA_REDIS_CACHE_TIME_OUT
=
10L
;
/**
/**
* 默认随机密码长度
* 默认随机密码长度
*/
*/
...
...
src/main/java/cn/quantgroup/xyqb/aspect/captcha/CaptchaFiniteValidateAdvisor.java
View file @
73cacd05
...
@@ -125,6 +125,11 @@ public class CaptchaFiniteValidateAdvisor {
...
@@ -125,6 +125,11 @@ public class CaptchaFiniteValidateAdvisor {
if
(
StringUtils
.
isNotBlank
(
captchaValue
))
{
if
(
StringUtils
.
isNotBlank
(
captchaValue
))
{
// 忽略用户输入的大小写
// 忽略用户输入的大小写
String
captcha
=
StringUtils
.
lowerCase
(
captchaValue
);
String
captcha
=
StringUtils
.
lowerCase
(
captchaValue
);
String
val
=
redisTemplate
.
opsForValue
().
get
(
Constants
.
IMAGE_CAPTCHA_REDIS_CACHE_KEY
.
concat
(
captchaId
));
if
(
null
==
val
){
return
JsonResult
.
buildSuccessResult
(
"图形验证码已过期,请重新获取"
,
""
,
2L
);
}
// 验证码校验
// 验证码校验
Boolean
validCaptcha
=
false
;
Boolean
validCaptcha
=
false
;
try
{
try
{
...
...
src/main/java/cn/quantgroup/xyqb/controller/external/UserController.java
View file @
73cacd05
...
@@ -48,6 +48,8 @@ import java.io.UnsupportedEncodingException;
...
@@ -48,6 +48,8 @@ import java.io.UnsupportedEncodingException;
import
java.nio.charset.Charset
;
import
java.nio.charset.Charset
;
import
java.util.*
;
import
java.util.*
;
import
static
cn
.
quantgroup
.
xyqb
.
Constants
.
VERIFICATION_CODE_FINITE_COUNT_NEW
;
/**
/**
* Http服务接口:用户注册、登录、重置密码
* Http服务接口:用户注册、登录、重置密码
* Created by FrankChow on 15/7/5.
* Created by FrankChow on 15/7/5.
...
@@ -186,7 +188,7 @@ public class UserController implements IBaseController {
...
@@ -186,7 +188,7 @@ public class UserController implements IBaseController {
}
}
String
verificationCode
=
successResult
.
getMsg
();
String
verificationCode
=
successResult
.
getMsg
();
// 执行短信验证码检查
// 执行短信验证码检查
verifyPhoneAndCode
(
phoneNo
,
verificationCode
);
verifyPhoneAndCode
ForOnce
(
phoneNo
,
verificationCode
);
return
userService
.
loginFast
(
channelId
,
appChannel
,
createdFrom
,
btRegisterChannelId
,
dimension
,
clickId
,
request
,
merchant
,
phoneNo
);
return
userService
.
loginFast
(
channelId
,
appChannel
,
createdFrom
,
btRegisterChannelId
,
dimension
,
clickId
,
request
,
merchant
,
phoneNo
);
}
}
...
@@ -582,4 +584,27 @@ public class UserController implements IBaseController {
...
@@ -582,4 +584,27 @@ public class UserController implements IBaseController {
}
}
}
}
/**
* 校验验证码 不论成功与否都删除
*
* @param phoneNo
* @param verificationCode
*/
private
void
verifyPhoneAndCodeForOnce
(
String
phoneNo
,
String
verificationCode
)
{
if
(!
smsService
.
verifyPhoneAndCode
(
phoneNo
,
verificationCode
))
{
// 是否需要重新发送短信验证码
if
(
smsService
.
needResendCode
(
phoneNo
,
VERIFICATION_CODE_FINITE_COUNT_NEW
))
{
throw
new
VerificationCodeErrorException
(
"验证码失效,请重新获取"
);
}
/**
* 删除
*/
smsService
.
deleteCodeFromCache
(
phoneNo
);
log
.
info
(
"验证码校验失败,phoneNo:{} , verificationCode:{}"
,
phoneNo
,
verificationCode
);
throw
new
VerificationCodeErrorException
(
"短信验证码错误"
);
}
else
{
smsService
.
deleteCodeFromCache
(
phoneNo
);
}
}
}
}
src/main/java/cn/quantgroup/xyqb/controller/external/captcha/ImageCaptchaController.java
View file @
73cacd05
...
@@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j;
...
@@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j;
import
org.apache.commons.codec.binary.Base64
;
import
org.apache.commons.codec.binary.Base64
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
...
@@ -21,6 +22,7 @@ import java.io.IOException;
...
@@ -21,6 +22,7 @@ import java.io.IOException;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.UUID
;
import
java.util.UUID
;
import
java.util.concurrent.TimeUnit
;
/**
/**
* 类名称:ImgCaptchaController
* 类名称:ImgCaptchaController
...
@@ -35,6 +37,10 @@ import java.util.UUID;
...
@@ -35,6 +37,10 @@ import java.util.UUID;
@RequestMapping
(
"/api"
)
@RequestMapping
(
"/api"
)
public
class
ImageCaptchaController
{
public
class
ImageCaptchaController
{
@Autowired
@Qualifier
(
"stringRedisTemplate"
)
private
RedisTemplate
<
String
,
String
>
redisTemplate
;
private
static
final
String
IMAGE_FORMAT_PNG
=
"png"
;
private
static
final
String
IMAGE_FORMAT_PNG
=
"png"
;
private
static
final
String
IMG_BASE64_PATTREN
=
"data:image/"
+
IMAGE_FORMAT_PNG
+
";base64,%s"
;
private
static
final
String
IMG_BASE64_PATTREN
=
"data:image/"
+
IMAGE_FORMAT_PNG
+
";base64,%s"
;
...
@@ -62,6 +68,7 @@ public class ImageCaptchaController {
...
@@ -62,6 +68,7 @@ public class ImageCaptchaController {
Map
<
String
,
String
>
data
=
new
HashMap
<>();
Map
<
String
,
String
>
data
=
new
HashMap
<>();
data
.
put
(
"imageId"
,
imageId
);
data
.
put
(
"imageId"
,
imageId
);
data
.
put
(
"image"
,
String
.
format
(
IMG_BASE64_PATTREN
,
imageBase64
));
data
.
put
(
"image"
,
String
.
format
(
IMG_BASE64_PATTREN
,
imageBase64
));
redisTemplate
.
opsForValue
().
set
(
Constants
.
IMAGE_CAPTCHA_REDIS_CACHE_KEY
.
concat
(
imageId
),
"1"
,
Constants
.
IMAGE_CAPTCHA_REDIS_CACHE_TIME_OUT
,
TimeUnit
.
MINUTES
);
return
JsonResult
.
buildSuccessResult
(
""
,
data
);
return
JsonResult
.
buildSuccessResult
(
""
,
data
);
}
}
...
...
src/main/java/cn/quantgroup/xyqb/controller/external/sms/SmsController.java
View file @
73cacd05
...
@@ -160,7 +160,7 @@ public class SmsController implements IBaseController {
...
@@ -160,7 +160,7 @@ public class SmsController implements IBaseController {
@RequestParam
(
required
=
false
,
defaultValue
=
""
)
String
appName
,
@RequestParam
(
required
=
false
,
defaultValue
=
""
)
String
appName
,
@RequestParam
(
required
=
false
)
String
smsMerchant
)
{
@RequestParam
(
required
=
false
)
String
smsMerchant
)
{
log
.
info
(
"快速登陆-发送验证码, phoneNo:{}, registerFrom:{}"
,
phoneNo
,
registerFrom
);
log
.
info
(
"快速登陆-发送验证码, phoneNo:{}, registerFrom:{}"
,
phoneNo
,
registerFrom
);
String
randomCode
=
getRandomCode
(
Constants
.
SMS_CODE_LEN_
4
);
String
randomCode
=
getRandomCode
(
Constants
.
SMS_CODE_LEN_
6
);
return
sendVerificationCode2
(
phoneNo
,
randomCode
,
appName
,
smsMerchant
);
return
sendVerificationCode2
(
phoneNo
,
randomCode
,
appName
,
smsMerchant
);
}
}
...
@@ -289,7 +289,7 @@ public class SmsController implements IBaseController {
...
@@ -289,7 +289,7 @@ public class SmsController implements IBaseController {
@RequestParam
(
required
=
false
,
defaultValue
=
""
)
String
appName
,
@RequestParam
(
required
=
false
,
defaultValue
=
""
)
String
appName
,
@RequestParam
(
required
=
false
)
String
smsMerchant
)
{
@RequestParam
(
required
=
false
)
String
smsMerchant
)
{
log
.
info
(
"快速登陆-发送验证码, phoneNo:{}, registerFrom:{}"
,
phoneNo
,
registerFrom
);
log
.
info
(
"快速登陆-发送验证码, phoneNo:{}, registerFrom:{}"
,
phoneNo
,
registerFrom
);
String
randomCode
=
getRandomCode
(
Constants
.
SMS_CODE_LEN_
4
);
String
randomCode
=
getRandomCode
(
Constants
.
SMS_CODE_LEN_
6
);
return
sendVerificationCode2New
(
phoneNo
,
randomCode
,
deviceId
,
true
,
appName
,
smsMerchant
);
return
sendVerificationCode2New
(
phoneNo
,
randomCode
,
deviceId
,
true
,
appName
,
smsMerchant
);
}
}
...
@@ -310,7 +310,7 @@ public class SmsController implements IBaseController {
...
@@ -310,7 +310,7 @@ public class SmsController implements IBaseController {
@RequestParam
(
required
=
false
,
defaultValue
=
""
)
String
appName
,
@RequestParam
(
required
=
false
,
defaultValue
=
""
)
String
appName
,
@RequestParam
(
required
=
false
)
String
smsMerchant
)
{
@RequestParam
(
required
=
false
)
String
smsMerchant
)
{
log
.
info
(
"快速登陆-发送验证码, phoneNo:{}, registerFrom:{}"
,
phoneNo
,
registerFrom
);
log
.
info
(
"快速登陆-发送验证码, phoneNo:{}, registerFrom:{}"
,
phoneNo
,
registerFrom
);
String
randomCode
=
getRandomCode
(
Constants
.
SMS_CODE_LEN_
4
);
String
randomCode
=
getRandomCode
(
Constants
.
SMS_CODE_LEN_
6
);
return
sendVerificationCode2New
(
phoneNo
,
randomCode
,
deviceId
,
false
,
appName
,
smsMerchant
);
return
sendVerificationCode2New
(
phoneNo
,
randomCode
,
deviceId
,
false
,
appName
,
smsMerchant
);
}
}
...
...
src/main/java/cn/quantgroup/xyqb/service/sms/ISmsService.java
View file @
73cacd05
...
@@ -33,4 +33,18 @@ public interface ISmsService {
...
@@ -33,4 +33,18 @@ public interface ISmsService {
*/
*/
boolean
needResendCode
(
String
phoneNo
);
boolean
needResendCode
(
String
phoneNo
);
/**
* 是否需要重新发送短信验证码
*
* @param phoneNo
* @return
*/
boolean
needResendCode
(
String
phoneNo
,
Long
threshold
);
/**
* 删除验证码缓存
* @param phoneNo
*/
void
deleteCodeFromCache
(
String
phoneNo
);
}
}
src/main/java/cn/quantgroup/xyqb/service/sms/impl/SmsServiceImpl.java
View file @
73cacd05
...
@@ -115,15 +115,28 @@ public class SmsServiceImpl implements ISmsService {
...
@@ -115,15 +115,28 @@ public class SmsServiceImpl implements ISmsService {
@Override
@Override
public
boolean
needResendCode
(
String
phoneNo
)
{
public
boolean
needResendCode
(
String
phoneNo
)
{
return
needResendCode
(
phoneNo
,
Constants
.
VERIFICATION_CODE_FINITE_COUNT
);
}
@Override
public
boolean
needResendCode
(
String
phoneNo
,
Long
threshold
)
{
String
verificationCountKey
=
Constants
.
REDIS_VERIFICATION_COUNT
+
phoneNo
;
String
verificationCountKey
=
Constants
.
REDIS_VERIFICATION_COUNT
+
phoneNo
;
Long
getVerificationCount
=
stringRedisTemplate
.
opsForHash
().
increment
(
verificationCountKey
,
Constants
.
REDIS_VERIFICATION_COUNT
,
1
);
Long
getVerificationCount
=
stringRedisTemplate
.
opsForHash
().
increment
(
verificationCountKey
,
Constants
.
REDIS_VERIFICATION_COUNT
,
1
);
boolean
needResend
=
getVerificationCount
>=
Constants
.
VERIFICATION_CODE_FINITE_COUNT
;
boolean
needResend
=
getVerificationCount
>=
threshold
;
if
(
needResend
)
{
if
(
needResend
)
{
deleteCodeFromCache
(
phoneNo
);
}
return
needResend
;
}
@Override
public
void
deleteCodeFromCache
(
String
phoneNo
)
{
String
verificationCountKey
=
Constants
.
REDIS_VERIFICATION_COUNT
+
phoneNo
;
String
key
=
Constants
.
REDIS_PREFIX_VERIFICATION_CODE
+
phoneNo
;
String
key
=
Constants
.
REDIS_PREFIX_VERIFICATION_CODE
+
phoneNo
;
stringRedisTemplate
.
delete
(
key
);
stringRedisTemplate
.
delete
(
key
);
stringRedisTemplate
.
opsForHash
().
delete
(
verificationCountKey
,
Constants
.
REDIS_VERIFICATION_COUNT
);
stringRedisTemplate
.
opsForHash
().
delete
(
verificationCountKey
,
Constants
.
REDIS_VERIFICATION_COUNT
);
}
}
return
needResend
;
}
}
}
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