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
6b945e53
Commit
6b945e53
authored
Nov 28, 2017
by
技术部-任文超
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完成在原有锁定、解锁指定IP基础上,增加黑白名单、Redis可选lock参数(针对撞库攻击)可配置的功能
优化RequestFilter的公共资源地址空间配置,清除重复项
parent
39b1973c
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
280 additions
and
13 deletions
+280
-13
Constants.java
src/main/java/cn/quantgroup/xyqb/Constants.java
+8
-2
PasswordErrorFiniteValidateAdvisor.java
.../xyqb/aspect/lock/PasswordErrorFiniteValidateAdvisor.java
+13
-3
PasswordFineteValidator.java
.../quantgroup/xyqb/aspect/lock/PasswordFineteValidator.java
+1
-1
LockIpv4Controller.java
...oup/xyqb/controller/external/lock/LockIpv4Controller.java
+255
-0
UserController.java
...ntgroup/xyqb/controller/internal/user/UserController.java
+1
-1
RequestFilter.java
src/main/java/cn/quantgroup/xyqb/filter/RequestFilter.java
+2
-6
No files found.
src/main/java/cn/quantgroup/xyqb/Constants.java
View file @
6b945e53
...
@@ -41,16 +41,22 @@ public interface Constants {
...
@@ -41,16 +41,22 @@ public interface Constants {
String
X_AUTH_TOKEN
=
"x-auth-token"
;
String
X_AUTH_TOKEN
=
"x-auth-token"
;
String
ONE_TIME_TOKEN
=
"oneTimeToken"
;
String
ONE_TIME_TOKEN
=
"oneTimeToken"
;
// -- Start -- IPV4安全策略常量组
String
REDIS_PASSWORD_ERROR_COUNT
=
"password_error_count:"
;
String
REDIS_PASSWORD_ERROR_COUNT
=
"password_error_count:"
;
String
REDIS_PASSWORD_ERROR_COUNT_FOR_IPV4
=
"password_error_count_4_ipv4:"
;
String
REDIS_PASSWORD_ERROR_COUNT_FOR_IPV4
=
"password_error_count_4_ipv4:"
;
String
IPV4_LOCK_WHITE
=
"lock_ipv4:white:"
;
String
IPV4_LOCK_BLACK
=
"lock_ipv4:black:"
;
String
IPV4_LOCK_MINUTES_REDIS
=
"lock_ipv4:minutes:"
;
String
IPV4_LOCK_ON_COUNTS_REDIS
=
"lock_ipv4:on_counts:"
;
String
IPV4_LOCK
=
"lock_ipv4:"
;
String
IPV4_LOCK
=
"lock_ipv4:"
;
Long
IPV4_LOCK_MINUTES
=
6
*
60L
;
Long
IPV4_LOCK_MINUTES
=
3
*
60L
;
Long
IPV4_COUNT_MINUTES
=
1L
;
Long
IPV4_COUNT_MINUTES
=
1L
;
Long
IPV4_LOCK_ON_COUNTS
=
20
0L
;
Long
IPV4_LOCK_ON_COUNTS
=
6
0L
;
int
DANGEROUS_TIME_START
=
22
;
int
DANGEROUS_TIME_START
=
22
;
int
DANGEROUS_TIME_END
=
6
;
int
DANGEROUS_TIME_END
=
6
;
String
CLEAR_LOCK_FOR_IPV4
=
"x-clear-lock-11241842-y"
;
String
CLEAR_LOCK_FOR_IPV4
=
"x-clear-lock-11241842-y"
;
String
CLEAR_LOCK_FOR_IPV4_KEY
=
"lhp.family.dwy.sjs.yym.cxy.cpg"
;
String
CLEAR_LOCK_FOR_IPV4_KEY
=
"lhp.family.dwy.sjs.yym.cxy.cpg"
;
// -- End -- IPV4安全策略常量组
/**
/**
* redis中token的key值前缀
* redis中token的key值前缀
*/
*/
...
...
src/main/java/cn/quantgroup/xyqb/aspect/
captcha
/PasswordErrorFiniteValidateAdvisor.java
→
src/main/java/cn/quantgroup/xyqb/aspect/
lock
/PasswordErrorFiniteValidateAdvisor.java
View file @
6b945e53
package
cn
.
quantgroup
.
xyqb
.
aspect
.
captcha
;
package
cn
.
quantgroup
.
xyqb
.
aspect
.
lock
;
import
cn.quantgroup.xyqb.Constants
;
import
cn.quantgroup.xyqb.Constants
;
...
@@ -39,7 +39,7 @@ public class PasswordErrorFiniteValidateAdvisor {
...
@@ -39,7 +39,7 @@ public class PasswordErrorFiniteValidateAdvisor {
/**
/**
* 密码错误限次切面
* 密码错误限次切面
*/
*/
@Pointcut
(
"@annotation(cn.quantgroup.xyqb.aspect.
captcha
.PasswordFineteValidator)"
)
@Pointcut
(
"@annotation(cn.quantgroup.xyqb.aspect.
lock
.PasswordFineteValidator)"
)
private
void
passwordErrorFiniteValidate
()
{
private
void
passwordErrorFiniteValidate
()
{
}
}
...
@@ -59,9 +59,19 @@ public class PasswordErrorFiniteValidateAdvisor {
...
@@ -59,9 +59,19 @@ public class PasswordErrorFiniteValidateAdvisor {
HttpServletRequest
request
=
((
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
()).
getRequest
();
HttpServletRequest
request
=
((
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
()).
getRequest
();
// 客户端IP
// 客户端IP
String
clientIp
=
getIp
(
request
);
String
clientIp
=
getIp
(
request
);
if
(
StringUtils
.
startsWith
(
clientIp
,
"139.198."
)){
// 入口服务器IP
if
(
StringUtils
.
startsWith
(
clientIp
,
"139.198."
)){
return
pjp
.
proceed
();
return
pjp
.
proceed
();
}
}
// 白名单
if
(
redisTemplate
.
opsForSet
().
isMember
(
Constants
.
IPV4_LOCK_WHITE
,
clientIp
)){
return
pjp
.
proceed
();
}
// 黑名单
if
(
redisTemplate
.
opsForSet
().
isMember
(
Constants
.
IPV4_LOCK_BLACK
,
clientIp
)){
LOGGER
.
info
(
"Locked ip access:{}"
,
clientIp
);
return
JsonResult
.
buildErrorStateResult
(
"登录失败"
,
null
);
}
String
lockIpv4Key
=
getLockIpv4Key
(
clientIp
);
String
lockIpv4Key
=
getLockIpv4Key
(
clientIp
);
String
lock
=
redisTemplate
.
opsForValue
().
get
(
lockIpv4Key
);
String
lock
=
redisTemplate
.
opsForValue
().
get
(
lockIpv4Key
);
if
(
Objects
.
equals
(
Boolean
.
TRUE
.
toString
(),
lock
)){
if
(
Objects
.
equals
(
Boolean
.
TRUE
.
toString
(),
lock
)){
...
...
src/main/java/cn/quantgroup/xyqb/aspect/
captcha
/PasswordFineteValidator.java
→
src/main/java/cn/quantgroup/xyqb/aspect/
lock
/PasswordFineteValidator.java
View file @
6b945e53
package
cn
.
quantgroup
.
xyqb
.
aspect
.
captcha
;
package
cn
.
quantgroup
.
xyqb
.
aspect
.
lock
;
import
java.lang.annotation.*
;
import
java.lang.annotation.*
;
...
...
src/main/java/cn/quantgroup/xyqb/controller/external/lock/LockIpv4Controller.java
0 → 100644
View file @
6b945e53
This diff is collapsed.
Click to expand it.
src/main/java/cn/quantgroup/xyqb/controller/internal/user/UserController.java
View file @
6b945e53
...
@@ -2,7 +2,7 @@ package cn.quantgroup.xyqb.controller.internal.user;
...
@@ -2,7 +2,7 @@ package cn.quantgroup.xyqb.controller.internal.user;
import
cn.quantgroup.xyqb.Constants
;
import
cn.quantgroup.xyqb.Constants
;
import
cn.quantgroup.xyqb.aspect.captcha.CaptchaFineteValidator
;
import
cn.quantgroup.xyqb.aspect.captcha.CaptchaFineteValidator
;
import
cn.quantgroup.xyqb.aspect.
captcha
.PasswordFineteValidator
;
import
cn.quantgroup.xyqb.aspect.
lock
.PasswordFineteValidator
;
import
cn.quantgroup.xyqb.aspect.logcaller.LogHttpCaller
;
import
cn.quantgroup.xyqb.aspect.logcaller.LogHttpCaller
;
import
cn.quantgroup.xyqb.controller.IBaseController
;
import
cn.quantgroup.xyqb.controller.IBaseController
;
import
cn.quantgroup.xyqb.entity.Merchant
;
import
cn.quantgroup.xyqb.entity.Merchant
;
...
...
src/main/java/cn/quantgroup/xyqb/filter/RequestFilter.java
View file @
6b945e53
...
@@ -26,12 +26,8 @@ import java.io.PrintWriter;
...
@@ -26,12 +26,8 @@ import java.io.PrintWriter;
public
class
RequestFilter
implements
Filter
{
public
class
RequestFilter
implements
Filter
{
private
static
final
String
[]
ALLOWED_PATTERNS
=
{
private
static
final
String
[]
ALLOWED_PATTERNS
=
{
"/user_detail/**"
,
"/hello/**"
,
"/innerapi/**"
,
"/user/exist"
,
"/motan/**"
,
"/user/register"
,
"/user/login"
,
"/user/register/fast"
,
"/wechat/**"
,
"/config/**"
,
"/api/**"
,
"/query/**"
,
"/user_detail/**"
,
"/hello/**"
,
"/innerapi/**"
,
"/motan/**"
,
"/user/**"
,
"/lock/**"
,
"/token/oneTime"
,
"/user/loginV1"
,
"/user/login/fastV1"
,
"/user/**"
,
"/api/sms/send_login_code_new_forH5"
,
"/user/lock_ipv4"
,
"/auth/info/login"
,
"/app/login"
,
"/app/login_super"
,
"/app/login2"
,
"/platform/api/page/return_url"
,
"/MP_verify_AWiagUn4kZiwmTt0.txt"
"/auth/info/login"
,
"/user/login/fast"
,
"/user/reset_password"
,
"/user/exist_check"
,
"/user/center/**"
,
"/jr58/**"
,
"/app/login"
,
"/app/login_super"
,
"/app/login2"
,
"/user/login2"
,
"/wechat/**"
,
"/config/**"
,
"/api/**"
,
"/user/exists_token"
,
"/query/**"
,
"/platform/api/page/return_url"
,
"/MP_"
+
"verify_AWiagUn4kZiwmTt0.txt"
};
};
private
static
final
String
UNAUTH_RESULT
=
JSONObject
.
toJSONString
(
JsonResult
.
buildErrorStateResult
(
"登录失败"
,
null
));
private
static
final
String
UNAUTH_RESULT
=
JSONObject
.
toJSONString
(
JsonResult
.
buildErrorStateResult
(
"登录失败"
,
null
));
@Autowired
@Autowired
...
...
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