Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
提交反馈
为 GitLab 提交贡献
登录
切换导航
P
pica-cloud-yunqueyilian
项目
项目
详情
动态
版本
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
收起侧边栏
Close sidebar
动态
分支图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
com.pica.cloud.wechat
pica-cloud-yunqueyilian
提交
c355df73
提交
c355df73
编写于
8月 21, 2018
作者:
chenzhehao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
common包中的PicaLogAspect过滤掉,使用自定义的PicaLogAspectForXml
上级
0b69015b
变更
4
显示空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
229 行增加
和
5 行删除
+229
-5
PicaLogAspectForXml.java
...d/wechat/yunqueyilian/common/aop/PicaLogAspectForXml.java
+145
-0
App.java
...n/java/com/pica/cloud/wechat/yunqueyilian/server/App.java
+5
-5
MyTypeExcludeFilter.java
...cloud/wechat/yunqueyilian/server/MyTypeExcludeFilter.java
+23
-0
MyTypeExcludeFilterApplicationContextInitializer.java
...ver/MyTypeExcludeFilterApplicationContextInitializer.java
+56
-0
未找到文件。
common/src/main/java/com/pica/cloud/wechat/yunqueyilian/common/aop/PicaLogAspectForXml.java
0 → 100644
浏览文件 @
c355df73
package
com
.
pica
.
cloud
.
wechat
.
yunqueyilian
.
common
.
aop
;
import
com.alibaba.fastjson.JSONObject
;
import
com.google.gson.Gson
;
import
com.google.gson.reflect.TypeToken
;
import
org.apache.commons.fileupload.servlet.ServletFileUpload
;
import
org.apache.commons.io.IOUtils
;
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.dom4j.Element
;
import
org.dom4j.io.SAXReader
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.context.request.RequestAttributes
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.BufferedReader
;
import
java.io.IOException
;
import
java.io.InputStreamReader
;
import
java.util.Enumeration
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* @author: zhehao.chen
* @version: V1.0
* @Description:
* @date: 2018/8/21 10:55
*/
@Aspect
@Component
public
class
PicaLogAspectForXml
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
PicaLogAspectForXml
.
class
);
ThreadLocal
<
Long
>
startTime
=
new
ThreadLocal
();
ThreadLocal
<
HttpServletRequest
>
request
=
new
ThreadLocal
();
ThreadLocal
<
String
>
contentType
=
new
ThreadLocal
();
@Pointcut
(
"execution(public * com.pica.cloud..*Controller.*(..))"
)
public
void
weblog
()
{
}
@Around
(
"weblog()"
)
public
Object
doAround
(
ProceedingJoinPoint
pjp
)
throws
Throwable
{
RequestAttributes
ra
=
RequestContextHolder
.
getRequestAttributes
();
ServletRequestAttributes
sra
=
(
ServletRequestAttributes
)
ra
;
HttpServletRequest
request
=
sra
.
getRequest
();
this
.
request
.
set
(
request
);
this
.
contentType
.
set
(
request
.
getHeader
(
"Content-Type"
));
String
url
=
request
.
getRequestURL
().
toString
();
String
method
=
request
.
getMethod
();
String
uri
=
request
.
getRequestURI
();
String
queryString
;
if
(
"GET"
.
equalsIgnoreCase
(
method
))
{
queryString
=
request
.
getQueryString
();
}
else
if
(!
this
.
parseMultipart
())
{
Gson
g
=
new
Gson
();
queryString
=
g
.
toJson
(
this
.
getBeanFromJsonBody
());
}
else
{
queryString
=
""
;
}
this
.
startTime
.
set
(
System
.
currentTimeMillis
());
logger
.
info
(
"request start, controller params==>, url: {}, method: {}, uri: {}, params: {}"
,
new
Object
[]{
url
,
method
,
uri
,
queryString
});
Object
result
=
pjp
.
proceed
();
String
res
=
""
;
if
(
this
.
contentType
.
get
().
equals
(
"text/xml"
))
{
res
=
result
.
toString
();
}
else
if
(
this
.
contentType
.
get
().
equals
(
"application/json"
))
{
Gson
gson
=
new
Gson
();
res
=
gson
.
toJson
(
result
);
}
logger
.
info
(
"request spent time milliSeconds ==>"
+
(
System
.
currentTimeMillis
()
-
(
Long
)
this
.
startTime
.
get
()));
if
(
this
.
parseMultipart
())
{
res
=
"upload/download"
;
}
logger
.
info
(
"request over,controller result ==> "
+
res
);
return
result
;
}
protected
Map
<
String
,
Object
>
getBeanFromJsonBody
()
throws
Exception
{
if
(
this
.
contentType
.
get
().
equals
(
"text/xml"
))
{
// 读取输入流
SAXReader
reader
=
new
SAXReader
();
org
.
dom4j
.
Document
document
=
reader
.
read
(
this
.
request
.
get
().
getInputStream
());
// 得到xml根元素
Element
root
=
document
.
getRootElement
();
List
<
Element
>
elementList
=
root
.
elements
();
// 遍历所有子节点
Map
<
String
,
Object
>
map
=
new
HashMap
<
String
,
Object
>();
for
(
Element
e
:
elementList
)
map
.
put
(
e
.
getName
(),
e
.
getText
());
return
map
;
}
else
if
(
this
.
contentType
.
get
().
equals
(
"application/json"
))
{
Gson
gson
=
new
Gson
();
return
(
Map
)
gson
.
fromJson
(
IOUtils
.
toString
(
new
InputStreamReader
(((
HttpServletRequest
)
this
.
request
.
get
()).
getInputStream
(),
"utf-8"
)),
(
new
TypeToken
<
Map
<
String
,
Object
>>()
{
}).
getType
());
}
return
null
;
}
protected
boolean
parseMultipart
()
throws
Exception
{
return
ServletFileUpload
.
isMultipartContent
((
HttpServletRequest
)
this
.
request
.
get
());
}
public
static
String
getBodyString
(
BufferedReader
br
)
{
String
str
=
""
;
try
{
String
inputLine
;
while
((
inputLine
=
br
.
readLine
())
!=
null
)
{
str
=
str
+
inputLine
;
}
br
.
close
();
}
catch
(
IOException
var4
)
{
System
.
out
.
println
(
"IOException: "
+
var4
);
}
return
str
;
}
public
static
String
getHeaderString
(
HttpServletRequest
request
)
{
JSONObject
jsonObject
=
new
JSONObject
();
Enumeration
enu
=
request
.
getHeaderNames
();
String
str
;
while
(
enu
.
hasMoreElements
())
{
str
=
(
String
)
enu
.
nextElement
();
String
headerValue
=
request
.
getHeader
(
str
);
jsonObject
.
put
(
str
,
headerValue
);
System
.
out
.
println
(
str
+
":"
+
headerValue
);
}
str
=
jsonObject
.
toJSONString
();
return
str
;
}
}
server/src/main/java/com/pica/cloud/wechat/yunqueyilian/server/App.java
浏览文件 @
c355df73
...
...
@@ -9,15 +9,15 @@ import org.springframework.cloud.netflix.feign.EnableFeignClients;
import
springfox.documentation.swagger2.annotations.EnableSwagger2
;
@EnableCircuitBreaker
//@SpringBootApplication(scanBasePackages = "com.pica.cloud")
@SpringBootApplication
@SpringBootApplication
(
scanBasePackages
=
"com.pica.cloud"
)
@EnableDiscoveryClient
@EnableSwagger2
@EnableFeignClients
@MapperScan
(
"com.pica.cloud.wechat.yunqueyilian.server.mapper"
)
public
class
App
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
App
.
class
,
args
);
public
static
void
main
(
String
[]
args
)
{
SpringApplication
springApplication
=
new
SpringApplication
(
App
.
class
);
springApplication
.
addInitializers
(
new
MyTypeExcludeFilterApplicationContextInitializer
());
springApplication
.
run
(
args
);
}
}
server/src/main/java/com/pica/cloud/wechat/yunqueyilian/server/MyTypeExcludeFilter.java
0 → 100644
浏览文件 @
c355df73
package
com
.
pica
.
cloud
.
wechat
.
yunqueyilian
.
server
;
import
org.springframework.boot.context.TypeExcludeFilter
;
import
org.springframework.core.type.classreading.MetadataReader
;
import
org.springframework.core.type.classreading.MetadataReaderFactory
;
/**
* @author: zhehao.chen
* @version: V1.0
* @Description:自定义bean过滤
* @date: 2018/8/20 18:12
*/
public
class
MyTypeExcludeFilter
extends
TypeExcludeFilter
{
@Override
public
boolean
match
(
MetadataReader
metadataReader
,
MetadataReaderFactory
metadataReaderFactory
)
{
//common包中的PicaLogAspect过滤掉,使用自定义的PicaLogAspectForXml
if
(
"com.pica.cloud.foundation.utils.aop.PicaLogAspect"
.
equals
(
metadataReader
.
getClassMetadata
().
getClassName
()))
{
return
true
;
}
return
false
;
}
}
server/src/main/java/com/pica/cloud/wechat/yunqueyilian/server/MyTypeExcludeFilterApplicationContextInitializer.java
0 → 100644
浏览文件 @
c355df73
package
com
.
pica
.
cloud
.
wechat
.
yunqueyilian
.
server
;
import
org.springframework.beans.BeansException
;
import
org.springframework.beans.factory.config.ConfigurableListableBeanFactory
;
import
org.springframework.beans.factory.support.BeanDefinitionRegistry
;
import
org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor
;
import
org.springframework.beans.factory.support.RootBeanDefinition
;
import
org.springframework.context.ApplicationContextInitializer
;
import
org.springframework.context.ConfigurableApplicationContext
;
import
org.springframework.core.Ordered
;
import
org.springframework.core.PriorityOrdered
;
/**
* @author: zhehao.chen
* @version: V1.0
* @Description:
* @date: 2018/8/20 18:25
*/
public
class
MyTypeExcludeFilterApplicationContextInitializer
implements
ApplicationContextInitializer
<
ConfigurableApplicationContext
>,
Ordered
{
@Override
public
void
initialize
(
ConfigurableApplicationContext
applicationContext
)
{
applicationContext
.
addBeanFactoryPostProcessor
(
new
MyTypeExcludeFilterPostProcessor
());
}
@Override
public
int
getOrder
()
{
return
0
;
}
private
static
class
MyTypeExcludeFilterPostProcessor
implements
PriorityOrdered
,
BeanDefinitionRegistryPostProcessor
{
public
static
final
String
BEAN_NAME
=
"com.pica.cloud.wechat.yunqueyilian.server.configuration.myTypeExcludeFilter"
;
@Override
public
int
getOrder
()
{
return
Ordered
.
HIGHEST_PRECEDENCE
;
}
@Override
public
void
postProcessBeanFactory
(
ConfigurableListableBeanFactory
beanFactory
)
throws
BeansException
{
}
@Override
public
void
postProcessBeanDefinitionRegistry
(
BeanDefinitionRegistry
registry
)
throws
BeansException
{
RootBeanDefinition
definition
=
new
RootBeanDefinition
(
MyTypeExcludeFilter
.
class
);
registry
.
registerBeanDefinition
(
BEAN_NAME
,
definition
);
}
}
}
\ No newline at end of file
写
预览
Markdown
格式
0%
请重试
or
附加一个文件
附加文件
取消
您添加了
0
人
到此讨论。请谨慎行事。
先完成此消息的编辑!
取消
想要评论请
注册
或
登录