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
b934ff6d
Commit
b934ff6d
authored
Jul 24, 2023
by
唐峰
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
请求头日志输出
parent
658380d0
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
231 additions
and
3 deletions
+231
-3
CustomHeaderRequestWrapper.java
...cn/quantgroup/xyqb/config/CustomHeaderRequestWrapper.java
+117
-0
InnerInterceptor.java
...main/java/cn/quantgroup/xyqb/filter/InnerInterceptor.java
+7
-0
RequestFilter.java
src/main/java/cn/quantgroup/xyqb/filter/RequestFilter.java
+44
-3
RequestBodyUtils.java
src/main/java/cn/quantgroup/xyqb/util/RequestBodyUtils.java
+63
-0
No files found.
src/main/java/cn/quantgroup/xyqb/config/CustomHeaderRequestWrapper.java
0 → 100644
View file @
b934ff6d
package
cn
.
quantgroup
.
xyqb
.
config
;
import
cn.quantgroup.xyqb.util.RequestBodyUtils
;
import
javax.servlet.ReadListener
;
import
javax.servlet.ServletInputStream
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequestWrapper
;
import
java.io.BufferedReader
;
import
java.io.ByteArrayInputStream
;
import
java.io.IOException
;
import
java.io.InputStreamReader
;
import
java.util.Arrays
;
import
java.util.Collections
;
import
java.util.Enumeration
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* @Describe:
* @Created by tangfeng 2023/7/25 07:05
*/
public
class
CustomHeaderRequestWrapper
extends
HttpServletRequestWrapper
{
private
Map
<
String
,
String
>
headers
=
new
HashMap
<>();
private
String
body
;
private
String
requestParam
;
public
String
getBody
()
{
return
body
;
}
public
String
getRequestParam
()
{
return
requestParam
;
}
public
CustomHeaderRequestWrapper
(
HttpServletRequest
request
)
throws
IOException
{
super
(
request
);
BufferedReader
reader
=
new
BufferedReader
(
new
InputStreamReader
(
request
.
getInputStream
()));
//读取输入流的内容转换为String类型IOUtils必须引入org.apache.dubbo.common.utils.IOUtils;包
String
body
=
RequestBodyUtils
.
read
(
reader
);
this
.
body
=
body
;
this
.
requestParam
=
request
.
getQueryString
();
}
/**
* 增加 http header
* @param name
* @param value
*/
public
void
addHeader
(
String
name
,
String
value
)
{
headers
.
put
(
name
,
value
);
}
@Override
public
String
getHeader
(
String
name
)
{
String
value
=
super
.
getHeader
(
name
);
//自定义优先
if
(
headers
.
containsKey
(
name
))
{
value
=
headers
.
get
(
name
);
}
return
value
;
}
/**
* get the Header names
*/
@Override
public
Enumeration
<
String
>
getHeaderNames
()
{
List
<
String
>
names
=
Collections
.
list
(
super
.
getHeaderNames
());
for
(
String
name
:
headers
.
keySet
())
{
names
.
add
(
name
);
}
return
Collections
.
enumeration
(
names
);
}
@Override
public
Enumeration
<
String
>
getHeaders
(
String
name
)
{
List
<
String
>
values
=
Collections
.
list
(
super
.
getHeaders
(
name
));
if
(
headers
.
containsKey
(
name
))
{
values
=
Arrays
.
asList
(
headers
.
get
(
name
));
}
return
Collections
.
enumeration
(
values
);
}
@Override
public
BufferedReader
getReader
()
throws
IOException
{
return
new
BufferedReader
(
new
InputStreamReader
(
this
.
getInputStream
()));
}
@Override
public
ServletInputStream
getInputStream
()
throws
IOException
{
final
ByteArrayInputStream
byteArrayIns
=
new
ByteArrayInputStream
(
body
.
getBytes
());
ServletInputStream
servletIns
=
new
ServletInputStream
()
{
@Override
public
boolean
isFinished
()
{
return
false
;
}
@Override
public
boolean
isReady
()
{
return
false
;
}
@Override
public
void
setReadListener
(
ReadListener
readListener
)
{
}
@Override
public
int
read
()
throws
IOException
{
return
byteArrayIns
.
read
();
}
};
return
servletIns
;
}
}
src/main/java/cn/quantgroup/xyqb/filter/InnerInterceptor.java
View file @
b934ff6d
...
...
@@ -9,16 +9,22 @@ import cn.quantgroup.xyqb.remote.StmsRemoteService;
import
cn.quantgroup.xyqb.service.session.ISessionService
;
import
cn.quantgroup.xyqb.session.XyqbSessionContextHolder
;
import
cn.quantgroup.xyqb.util.StringUtils
;
import
com.alibaba.fastjson.JSONObject
;
import
com.google.common.collect.Maps
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.web.servlet.HandlerInterceptor
;
import
org.springframework.web.servlet.ModelAndView
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.util.Enumeration
;
import
java.util.LinkedHashMap
;
import
java.util.Map
;
/**
* stms权限认证拦截器
*/
@Slf4j
public
class
InnerInterceptor
implements
HandlerInterceptor
{
private
final
ISessionService
sessionService
;
private
final
StmsRemoteService
stmsRemoteService
;
...
...
@@ -30,6 +36,7 @@ public class InnerInterceptor implements HandlerInterceptor {
@Override
public
boolean
preHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
)
throws
Exception
{
//所有开放出去的外部接口,都需要验证租户id和注册来源
String
tenantId
=
request
.
getHeader
(
Constants
.
X_AUTH_TENANT
);
String
registeredFrom
=
request
.
getHeader
(
Constants
.
X_AUTH_FROM
);
...
...
src/main/java/cn/quantgroup/xyqb/filter/RequestFilter.java
View file @
b934ff6d
package
cn
.
quantgroup
.
xyqb
.
filter
;
import
cn.quantgroup.xyqb.config.CustomHeaderRequestWrapper
;
import
cn.quantgroup.xyqb.model.JsonResult
;
import
cn.quantgroup.xyqb.model.session.SessionStruct
;
import
cn.quantgroup.xyqb.service.session.ISessionService
;
import
cn.quantgroup.xyqb.session.XyqbSessionContextHolder
;
import
com.alibaba.fastjson.JSONObject
;
import
com.google.common.collect.Maps
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.http.HttpStatus
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
...
...
@@ -16,12 +19,15 @@ import javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.io.PrintWriter
;
import
java.util.Enumeration
;
import
java.util.Map
;
import
java.util.Objects
;
/**
* Created by 11 on 2016/12/29.
*/
@Component
@Slf4j
public
class
RequestFilter
implements
Filter
{
/**
...
...
@@ -44,12 +50,14 @@ public class RequestFilter implements Filter {
public
void
doFilter
(
ServletRequest
servletRequest
,
ServletResponse
servletResponse
,
FilterChain
filterChain
)
throws
IOException
,
ServletException
{
HttpServletRequest
request
=
(
HttpServletRequest
)
servletRequest
;
HttpServletResponse
response
=
(
HttpServletResponse
)
servletResponse
;
printReqLog
(
request
);
// 带状态接口
if
(
isMatch
(
request
))
{
// 需获取session信息
SessionStruct
sessionStruct
=
XyqbSessionContextHolder
.
getXSessionFromRedis
();
if
(
Objects
.
isNull
(
sessionStruct
))
{
/* 如果没有获取到session信息则返回错误信息 */
/* 如果没有获取到session信息则返回错误信息 */
response
.
setStatus
(
HttpStatus
.
SC_UNAUTHORIZED
);
response
.
setHeader
(
"Content-Type"
,
"application/json;charset=utf-8"
);
PrintWriter
writer
=
response
.
getWriter
();
...
...
@@ -57,9 +65,9 @@ public class RequestFilter implements Filter {
writer
.
close
();
return
;
}
else
{
/* 延续session生命期 */
/* 延续session生命期 */
try
{
sessionService
.
persistSession
(
sessionStruct
.
getSid
(),
sessionStruct
.
getValues
(),
sessionStruct
.
getTenantId
());
sessionService
.
persistSession
(
sessionStruct
.
getSid
(),
sessionStruct
.
getValues
(),
sessionStruct
.
getTenantId
());
}
finally
{
XyqbSessionContextHolder
.
releaseSession
();
}
...
...
@@ -96,4 +104,37 @@ public class RequestFilter implements Filter {
public
void
destroy
()
{
}
private
void
printReqLog
(
HttpServletRequest
request
)
{
try
{
Map
<
String
,
String
>
headerMap
=
processHeader
(
request
);
String
url
=
request
.
getRequestURL
().
toString
();
Map
<
String
,
String
>
requestParamMap
=
Maps
.
newHashMap
();
CustomHeaderRequestWrapper
requestWrapper
=
new
CustomHeaderRequestWrapper
(
request
);
requestParamMap
.
put
(
"请求参数"
,
requestWrapper
.
getRequestParam
());
requestParamMap
.
put
(
"请求体"
,
requestWrapper
.
getBody
());
log
.
info
(
"调用接口开始:URL:{},请求头:{},请求参数:{},HTTP Method:{}"
,
url
,
JSONObject
.
toJSONString
(
headerMap
),
JSONObject
.
toJSONString
(
requestParamMap
),
requestWrapper
.
getMethod
()
);
}
catch
(
IOException
e
)
{
log
.
error
(
"printReqLog error:{}"
,
e
.
getMessage
(),
e
);
}
}
private
Map
<
String
,
String
>
processHeader
(
HttpServletRequest
req
)
{
Map
<
String
,
String
>
map
=
Maps
.
newHashMap
();
Enumeration
<
String
>
headerNames
=
req
.
getHeaderNames
();
while
(
headerNames
.
hasMoreElements
())
{
String
s
=
headerNames
.
nextElement
();
if
(
org
.
apache
.
commons
.
lang3
.
StringUtils
.
isNotEmpty
(
s
))
{
map
.
put
(
s
,
req
.
getHeader
(
s
));
}
}
return
map
;
}
}
src/main/java/cn/quantgroup/xyqb/util/RequestBodyUtils.java
0 → 100644
View file @
b934ff6d
package
cn
.
quantgroup
.
xyqb
.
util
;
import
java.io.IOException
;
import
java.io.Reader
;
import
java.io.StringWriter
;
import
java.io.Writer
;
/**
* @Describe:
* @Created by tangfeng 2022/7/12 08:20
*/
public
class
RequestBodyUtils
{
private
static
final
int
BUFFER_SIZE
=
1024
*
8
;
/**
* read string.
*
* @param reader Reader instance.
* @return String.
* @throws IOException
*/
public
static
String
read
(
Reader
reader
)
throws
IOException
{
StringWriter
writer
=
new
StringWriter
();
try
{
write
(
reader
,
writer
);
return
writer
.
getBuffer
().
toString
();
}
finally
{
writer
.
close
();
}
}
/**
* write.
*
* @param reader Reader.
* @param writer Writer.
* @return count.
* @throws IOException
*/
public
static
long
write
(
Reader
reader
,
Writer
writer
)
throws
IOException
{
return
write
(
reader
,
writer
,
BUFFER_SIZE
);
}
/**
* write.
*
* @param reader Reader.
* @param writer Writer.
* @param bufferSize buffer size.
* @return count.
* @throws IOException
*/
public
static
long
write
(
Reader
reader
,
Writer
writer
,
int
bufferSize
)
throws
IOException
{
int
read
;
long
total
=
0
;
char
[]
buf
=
new
char
[
BUFFER_SIZE
];
while
((
read
=
reader
.
read
(
buf
))
!=
-
1
)
{
writer
.
write
(
buf
,
0
,
read
);
total
+=
read
;
}
return
total
;
}
}
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