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
95606e4a
Commit
95606e4a
authored
May 23, 2017
by
Java-郭京峰
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master' into motan_rpc
parents
ada70f27
dc405a32
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
278 additions
and
4 deletions
+278
-4
LogCallHttpAspect.java
...n/quantgroup/xyqb/aspect/logcaller/LogCallHttpAspect.java
+63
-0
LogHttpCaller.java
...va/cn/quantgroup/xyqb/aspect/logcaller/LogHttpCaller.java
+12
-0
InnerController.java
...tgroup/xyqb/controller/external/user/InnerController.java
+36
-0
UserController.java
...ntgroup/xyqb/controller/internal/user/UserController.java
+1
-0
IUserService.java
...in/java/cn/quantgroup/xyqb/service/user/IUserService.java
+1
-0
UserServiceImpl.java
...cn/quantgroup/xyqb/service/user/impl/UserServiceImpl.java
+10
-0
Utils.java
src/main/java/cn/quantgroup/xyqb/util/Utils.java
+24
-0
WithOutPhoneLoggingEvent.java
...cn/quantgroup/xyqb/util/log/WithOutPhoneLoggingEvent.java
+99
-0
WithOutPhoneRollingFileAppender.java
...tgroup/xyqb/util/log/WithOutPhoneRollingFileAppender.java
+18
-0
logback.xml
src/main/resources/config/dev/logback.xml
+11
-2
logback.xml
src/main/resources/config/release01/logback.xml
+3
-2
No files found.
src/main/java/cn/quantgroup/xyqb/aspect/logcaller/LogCallHttpAspect.java
0 → 100644
View file @
95606e4a
package
cn
.
quantgroup
.
xyqb
.
aspect
.
logcaller
;
import
cn.quantgroup.xyqb.util.ApplicationContextHolder
;
import
cn.quantgroup.xyqb.util.IPUtil
;
import
org.aspectj.lang.ProceedingJoinPoint
;
import
org.aspectj.lang.annotation.Around
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Pointcut
;
import
org.aspectj.lang.reflect.MethodSignature
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.core.Ordered
;
import
org.springframework.core.annotation.Order
;
import
org.springframework.scheduling.annotation.Async
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
javax.servlet.http.HttpServletRequest
;
/**
* 调用者记录
* Created by Administrator on 2017/5/15.
*/
@Aspect
@Component
@Order
(
value
=
Ordered
.
HIGHEST_PRECEDENCE
)
public
class
LogCallHttpAspect
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
LogCallHttpAspect
.
class
);
@Pointcut
(
"@annotation(cn.quantgroup.xyqb.aspect.logcaller.LogHttpCaller)"
)
private
void
logHttpCaller
()
{
}
@Around
(
"logHttpCaller()"
)
public
Object
record
(
ProceedingJoinPoint
pjp
)
throws
Throwable
{
Object
result
=
pjp
.
proceed
();
// 异步记录调用日志
try
{
ServletRequestAttributes
attrs
=
(
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
();
HttpServletRequest
request
=
attrs
.
getRequest
();
String
remoteIP
=
IPUtil
.
getRemoteIP
(
request
);
LogCallHttpAspect
logCallHttpAspect
=
ApplicationContextHolder
.
getBean
(
LogCallHttpAspect
.
class
);
logCallHttpAspect
.
asyncRecordIt
(
pjp
,
result
,
remoteIP
);
}
catch
(
Exception
e
){
}
return
result
;
}
@Async
public
void
asyncRecordIt
(
ProceedingJoinPoint
pjp
,
Object
result
,
String
remoteIP
){
Object
[]
args
=
pjp
.
getArgs
();
String
methodName
=
pjp
.
getSignature
().
getName
();
String
targetName
=
pjp
.
getTarget
().
getClass
().
getName
();
LOGGER
.
info
(
"http api is called,from IP:[{}],method :[{}],args:[{}],response:[{}]"
,
remoteIP
,
targetName
.
concat
(
"."
).
concat
(
methodName
),
args
,
result
);
}
}
src/main/java/cn/quantgroup/xyqb/aspect/logcaller/LogHttpCaller.java
0 → 100644
View file @
95606e4a
package
cn
.
quantgroup
.
xyqb
.
aspect
.
logcaller
;
import
java.lang.annotation.*
;
/**
* Created by Administrator on 2017/5/15.
*/
@Documented
@Target
(
ElementType
.
METHOD
)
@Retention
(
RetentionPolicy
.
RUNTIME
)
public
@interface
LogHttpCaller
{
}
src/main/java/cn/quantgroup/xyqb/controller/external/user/InnerController.java
View file @
95606e4a
package
cn
.
quantgroup
.
xyqb
.
controller
.
external
.
user
;
import
cn.quantgroup.xyqb.aspect.logcaller.LogHttpCaller
;
import
cn.quantgroup.xyqb.controller.IBaseController
;
import
cn.quantgroup.xyqb.entity.*
;
import
cn.quantgroup.user.enums.*
;
...
...
@@ -27,6 +28,7 @@ import java.text.ParseException;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* Created by Miraculous on 2016/12/19.
...
...
@@ -57,6 +59,7 @@ public class InnerController implements IBaseController {
private
ISessionService
sessionService
;
@RequestMapping
(
"/user/search/phoneNo"
)
@LogHttpCaller
public
JsonResult
findByPhoneNo
(
String
phoneNo
)
{
User
user
=
userService
.
findByPhoneInDb
(
phoneNo
);
if
(
user
==
null
)
{
...
...
@@ -67,6 +70,7 @@ public class InnerController implements IBaseController {
}
@RequestMapping
(
"/user/search/uuid"
)
@LogHttpCaller
public
JsonResult
findByUuid
(
String
uuid
)
{
User
user
=
userService
.
findByUuidInDb
(
uuid
);
if
(
user
==
null
)
{
...
...
@@ -77,6 +81,7 @@ public class InnerController implements IBaseController {
}
@RequestMapping
(
"/user/getPhoneByUserIds"
)
@LogHttpCaller
public
JsonResult
findByIds
(
@RequestParam
(
value
=
"userIds"
)
String
userIdsString
)
{
LOGGER
.
info
(
"批量查询用户的手机号列表, userIdsString:"
+
userIdsString
);
if
(
StringUtils
.
isEmpty
(
userIdsString
))
{
...
...
@@ -194,6 +199,7 @@ public class InnerController implements IBaseController {
* @return
*/
@RequestMapping
(
"/user_detail/search/userId"
)
@LogHttpCaller
public
JsonResult
findUserDetailByUserId
(
Long
userId
)
{
UserDetail
userDetail
=
userDetailService
.
findByUserId
(
userId
);
if
(
userDetail
!=
null
)
{
...
...
@@ -203,6 +209,7 @@ public class InnerController implements IBaseController {
}
@RequestMapping
(
"/user/search/userId"
)
@LogHttpCaller
public
JsonResult
findUserByUserId
(
Long
userId
)
{
User
user
=
userService
.
findById
(
userId
);
if
(
user
!=
null
)
{
...
...
@@ -212,6 +219,7 @@ public class InnerController implements IBaseController {
}
@RequestMapping
(
"/user_detail/search/phone"
)
@LogHttpCaller
public
JsonResult
findUserDetailByPhone
(
String
phoneNo
)
{
UserDetail
userDetail
=
userDetailService
.
findByPhoneNo
(
phoneNo
);
if
(
userDetail
!=
null
)
{
...
...
@@ -230,6 +238,7 @@ public class InnerController implements IBaseController {
}
@RequestMapping
(
"/contact/search/user_id"
)
@LogHttpCaller
public
JsonResult
findContactsByUserId
(
Long
userId
)
{
if
(
null
==
userId
)
{
return
JsonResult
.
buildErrorStateResult
(
null
,
null
);
...
...
@@ -360,6 +369,7 @@ public class InnerController implements IBaseController {
}
@RequestMapping
(
"/user_detail/search_list"
)
@LogHttpCaller
public
JsonResult
searchUserDetailList
(
String
name
,
String
phoneNo
,
String
idNo
)
{
LOGGER
.
info
(
"searchUserDetailList ,param.name:{},phone:{},idNo:{},ip:{}"
,
name
,
phoneNo
,
idNo
,
getIp
());
...
...
@@ -383,6 +393,7 @@ public class InnerController implements IBaseController {
}
@RequestMapping
(
"/user/query/openId"
)
@LogHttpCaller
public
JsonResult
queryOpenIdByUserId
(
Long
userId
)
{
if
(
userId
==
null
)
{
return
JsonResult
.
buildErrorStateResult
(
"userId不能为空"
,
null
);
...
...
@@ -395,6 +406,7 @@ public class InnerController implements IBaseController {
}
@RequestMapping
(
"/user/wechat/phone_no"
)
@LogHttpCaller
public
JsonResult
queryOpenIdByPhoneNo
(
String
phoneNo
)
{
if
(
StringUtils
.
isBlank
(
phoneNo
))
{
return
JsonResult
.
buildErrorStateResult
(
"手机号错误"
,
null
);
...
...
@@ -453,6 +465,7 @@ public class InnerController implements IBaseController {
}
@RequestMapping
(
"/user/spouse/findByUserId"
)
@LogHttpCaller
public
JsonResult
querySpouse
(
Long
userId
)
{
if
(
userId
==
null
||
userId
==
0
)
{
return
JsonResult
.
buildErrorStateResult
(
"用户不能为空"
,
null
);
...
...
@@ -465,6 +478,29 @@ public class InnerController implements IBaseController {
return
JsonResult
.
buildSuccessResult
(
null
,
UserSpouseRet
.
getUserSpouseRet
(
userSpouse
));
}
@RequestMapping
(
"/user/findByPhones"
)
public
JsonResult
getUserIdByPhones
(
@RequestParam
(
"userPhones"
)
String
userPhones
){
//todo now
if
(
StringUtils
.
isBlank
(
userPhones
)){
return
JsonResult
.
buildErrorStateResult
(
"传入用户手机号不可为空"
,
null
);
}
List
<
String
>
phones
=
JSONObject
.
parseObject
(
userPhones
,
new
TypeReference
<
List
<
String
>>()
{});
if
(
org
.
apache
.
commons
.
collections
.
CollectionUtils
.
isNotEmpty
(
phones
))
{
if
(!(
phones
.
size
()>
500
))
{
List
<
User
>
users
=
userService
.
findByPhones
(
phones
);
if
(
org
.
apache
.
commons
.
collections
.
CollectionUtils
.
isNotEmpty
(
users
))
{
return
JsonResult
.
buildSuccessResult
(
null
,
users
.
stream
().
map
(
User:
:
getId
).
collect
(
Collectors
.
toList
()));
}
else
{
return
JsonResult
.
buildSuccessResult
(
null
,
null
);
}
}
return
JsonResult
.
buildErrorStateResult
(
"单次批量查询不可超过500个手机号"
,
null
);
}
return
JsonResult
.
buildErrorStateResult
(
"传入用户手机号不可为空"
,
null
);
}
/**
* 重置密码接口,供内部人员使用(例如绝影)
* @param key
...
...
src/main/java/cn/quantgroup/xyqb/controller/internal/user/UserController.java
View file @
95606e4a
...
...
@@ -436,6 +436,7 @@ public class UserController implements IBaseController {
User
user
=
getCurrentUser
();
Long
userId
=
user
.
getId
();
WechatUserInfo
userInfo
=
wechatService
.
findWechatUserInfoFromDb
(
openId
);
LOGGER
.
info
(
"微信关联openId,user:[{}],openId:[{}],wechatUserInfo:[{}]"
,
user
,
openId
,
userInfo
);
// 已经绑定过了
if
(
userInfo
!=
null
&&
StringUtils
.
isNotEmpty
(
userInfo
.
getPhoneNo
()))
{
...
...
src/main/java/cn/quantgroup/xyqb/service/user/IUserService.java
View file @
95606e4a
...
...
@@ -32,4 +32,5 @@ public interface IUserService {
User
findById
(
Long
userId
);
List
<
User
>
findByPhones
(
List
<
String
>
phones
);
}
src/main/java/cn/quantgroup/xyqb/service/user/impl/UserServiceImpl.java
View file @
95606e4a
...
...
@@ -7,6 +7,7 @@ import cn.quantgroup.xyqb.service.sms.ISmsService;
import
cn.quantgroup.xyqb.service.user.ILkbUserService
;
import
cn.quantgroup.xyqb.service.user.IUserService
;
import
cn.quantgroup.xyqb.util.PasswordUtil
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Maps
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang.StringUtils
;
...
...
@@ -17,6 +18,7 @@ import org.springframework.data.redis.core.RedisTemplate;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
javax.persistence.criteria.Predicate
;
import
javax.transaction.Transactional
;
import
java.sql.Timestamp
;
import
java.util.List
;
...
...
@@ -88,6 +90,14 @@ public class UserServiceImpl implements IUserService {
return
userRepository
.
findById
(
userId
);
}
@Override
public
List
<
User
>
findByPhones
(
List
<
String
>
phones
)
{
return
userRepository
.
findAll
((
root
,
query
,
cb
)
->
{
query
.
where
(
root
.
get
(
"phoneNo"
).
as
(
String
.
class
).
in
(
phones
));
return
query
.
getRestriction
();
});
}
@Override
public
User
registerAndReturn
(
String
phoneNo
,
String
password
,
Long
registerFrom
)
{
...
...
src/main/java/cn/quantgroup/xyqb/util/Utils.java
View file @
95606e4a
package
cn
.
quantgroup
.
xyqb
.
util
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
/**
* @author mengfan.feng
*/
public
class
Utils
{
private
static
Pattern
pattern
=
Pattern
.
compile
(
"(?<!\\d)(?:(?:1[34578]\\d{9})|(?:861[34578]\\d{9}))(?!\\d)"
);
public
static
String
safeMap2Str
(
Map
<
String
,
String
>
info
)
{
if
(
null
==
info
)
{
return
null
;
...
...
@@ -26,4 +32,22 @@ public class Utils {
return
builder
.
toString
();
}
public
static
String
coverPhone
(
String
str
){
if
(
str
.
length
()<=
0
)
return
""
;
if
(
str
.
length
()>
1024
)
//长度超过1024的字符串不走正则匹配过滤手机号
return
""
;
Matcher
matcher
=
pattern
.
matcher
(
str
);
Map
<
String
,
String
>
replaceMap
=
new
HashMap
<>();
while
(
matcher
.
find
())
{
String
group
=
matcher
.
group
();
String
replace
=
group
.
substring
(
0
,
3
).
concat
(
"****"
).
concat
(
group
.
substring
(
7
)).
concat
(
" ["
.
concat
(
PasswordUtil
.
MD5
(
group
)).
concat
(
"]"
));
replaceMap
.
put
(
group
,
replace
);
}
Set
<
Map
.
Entry
<
String
,
String
>>
entries
=
replaceMap
.
entrySet
();
for
(
Map
.
Entry
<
String
,
String
>
entry
:
entries
){
str
=
str
.
replaceAll
(
entry
.
getKey
(),
entry
.
getValue
());
}
return
str
;
}
}
src/main/java/cn/quantgroup/xyqb/util/log/WithOutPhoneLoggingEvent.java
0 → 100644
View file @
95606e4a
package
cn
.
quantgroup
.
xyqb
.
util
.
log
;
import
ch.qos.logback.classic.Level
;
import
ch.qos.logback.classic.spi.ILoggingEvent
;
import
ch.qos.logback.classic.spi.IThrowableProxy
;
import
ch.qos.logback.classic.spi.LoggerContextVO
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
import
cn.quantgroup.xyqb.util.PasswordUtil
;
import
cn.quantgroup.xyqb.util.Utils
;
import
org.apache.commons.codec.digest.Md5Crypt
;
import
org.slf4j.Marker
;
/**
* Created by ocean on 2017/5/4.
*/
public
class
WithOutPhoneLoggingEvent
implements
ILoggingEvent
{
private
ILoggingEvent
event
;
transient
String
withOutPhoneFormattedMessage
;
public
WithOutPhoneLoggingEvent
(
ILoggingEvent
event
){
this
.
event
=
event
;
}
@Override
public
String
getThreadName
()
{
return
this
.
event
.
getThreadName
();
}
@Override
public
Level
getLevel
()
{
return
this
.
event
.
getLevel
();
}
@Override
public
String
getMessage
()
{
return
this
.
event
.
getMessage
();
}
@Override
public
Object
[]
getArgumentArray
()
{
return
this
.
event
.
getArgumentArray
();
}
@Override
public
String
getFormattedMessage
()
{
if
(
withOutPhoneFormattedMessage
!=
null
)
{
return
withOutPhoneFormattedMessage
;
}
// 用正则找到手机号,并打上掩码,替换进去
withOutPhoneFormattedMessage
=
Utils
.
coverPhone
(
event
.
getFormattedMessage
());
return
withOutPhoneFormattedMessage
;
}
@Override
public
String
getLoggerName
()
{
return
this
.
event
.
getLoggerName
();
}
@Override
public
LoggerContextVO
getLoggerContextVO
()
{
return
this
.
event
.
getLoggerContextVO
();
}
@Override
public
IThrowableProxy
getThrowableProxy
()
{
return
this
.
event
.
getThrowableProxy
();
}
@Override
public
StackTraceElement
[]
getCallerData
()
{
return
this
.
event
.
getCallerData
();
}
@Override
public
boolean
hasCallerData
()
{
return
this
.
event
.
hasCallerData
();
}
@Override
public
Marker
getMarker
()
{
return
this
.
event
.
getMarker
();
}
@Override
public
Map
<
String
,
String
>
getMDCPropertyMap
()
{
return
this
.
event
.
getMDCPropertyMap
();
}
@Override
public
Map
<
String
,
String
>
getMdc
()
{
return
this
.
event
.
getMdc
();
}
@Override
public
long
getTimeStamp
()
{
return
this
.
event
.
getTimeStamp
();
}
@Override
public
void
prepareForDeferredProcessing
()
{
this
.
getFormattedMessage
();
this
.
getThreadName
();
// fixes http://jira.qos.ch/browse/LBCLASSIC-104
this
.
getMDCPropertyMap
();
}
}
src/main/java/cn/quantgroup/xyqb/util/log/WithOutPhoneRollingFileAppender.java
0 → 100644
View file @
95606e4a
package
cn
.
quantgroup
.
xyqb
.
util
.
log
;
import
ch.qos.logback.classic.spi.ILoggingEvent
;
import
ch.qos.logback.core.rolling.RollingFileAppender
;
/**
* Created by ocean on 2017/5/4.
*/
public
class
WithOutPhoneRollingFileAppender
<
E
>
extends
RollingFileAppender
<
E
>
{
@Override
public
void
doAppend
(
E
eventObject
)
{
if
(
eventObject
instanceof
ILoggingEvent
){
eventObject
=
(
E
)
new
WithOutPhoneLoggingEvent
((
ILoggingEvent
)
eventObject
);
}
super
.
doAppend
(
eventObject
);
}
}
src/main/resources/config/dev/logback.xml
View file @
95606e4a
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appender
name=
"STDOUT"
class=
"ch.qos.logback.core.ConsoleAppender"
>
<appender
name=
"STDOUT"
class=
"cn.quantgroup.xyqb.util.log.WithOutPhoneRollingFileAppender"
>
<file>
/home/quant_group/logs/xyqb_user.log
</file>
<rollingPolicy
class=
"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<fileNamePattern>
/home/quant_group/logs/xyqb_user.log.%d{yyyy-MM-dd}
</fileNamePattern>
<append>
true
</append>
<maxHistory>
30
</maxHistory>
</rollingPolicy>
<!--
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-->
<layout
class=
"ch.qos.logback.classic.PatternLayout"
>
<pattern>
%d{ISO8601} [%-5level] %logger{36} - %msg%n
</pattern>
<pattern>
%d{ISO8601} [%
thread] [%
-5level] %logger{36} - %msg%n
</pattern>
</layout>
</appender>
...
...
src/main/resources/config/release01/logback.xml
View file @
95606e4a
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appender
name=
"FILE"
class=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<!--<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
<appender
name=
"FILE"
class=
"cn.quantgroup.xyqb.util.log.WithOutPhoneRollingFileAppender"
>
<file>
/home/quant_group/logs/xyqb_user.log
</file>
<rollingPolicy
class=
"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<fileNamePattern>
/home/quant_group/logs/xyqb_user.log.%d{yyyy-MM-dd}
</fileNamePattern>
...
...
@@ -8,7 +9,7 @@
<maxHistory>
30
</maxHistory>
</rollingPolicy>
<layout
class=
"ch.qos.logback.classic.PatternLayout"
>
<pattern>
%d{ISO8601} [%-5level] %logger{36} - %msg%n
</pattern>
<pattern>
%d{ISO8601} [%
thread] [%
-5level] %logger{36} - %msg%n
</pattern>
</layout>
</appender>
...
...
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