Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
黄嘉阳
/
iot-platform-server
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
226c869e
authored
Sep 25, 2023
by
李小龙
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
fix
parent
8f30ccec
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
235 additions
and
235 deletions
server-api/src/main/java/com/makeit/api/external/filter/MyRequestWrapper.java
server-api/src/main/java/com/makeit/api/external/filter/RequestReplaceFilter.java
server-api/src/main/java/com/makeit/api/external/filter/SignAuthFilter.java
server-api/src/main/java/com/makeit/api/external/filter/MyRequestWrapper.java
View file @
226c869e
package
com
.
makeit
.
api
.
external
.
filter
;
import
org.apache.commons.io.IOUtils
;
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.IOException
;
import
java.io.InputStreamReader
;
/**
* @Description: 解决request.getInputStream()只能读取一次的问题
* @PackageName: net.dlet.dhdemo.utils.dhutils
* @Name: MyRequestWrapper
* @Author: cure
* @CreateDate: 2020/09/06 4:44
* @ModifyUser:
* @ModifyDate:
* @ModifyDesc: 修改内容
* @DayNameFull: 星期日
* @ProjectName: dhdemo
* @Version: 1.0
**/
public
class
MyRequestWrapper
extends
HttpServletRequestWrapper
{
private
volatile
byte
[]
body
;
public
MyRequestWrapper
(
HttpServletRequest
request
)
throws
IOException
{
super
(
request
);
body
=
IOUtils
.
toByteArray
(
super
.
getInputStream
());
}
public
byte
[]
getBody
()
{
return
body
;
}
public
void
setBody
(
byte
[]
body
)
{
this
.
body
=
body
;
}
@Override
public
BufferedReader
getReader
()
throws
IOException
{
return
new
BufferedReader
(
new
InputStreamReader
(
getInputStream
()));
}
@Override
public
ServletInputStream
getInputStream
()
throws
IOException
{
return
new
RequestBodyCachingInputStream
(
body
);
}
private
class
RequestBodyCachingInputStream
extends
ServletInputStream
{
private
byte
[]
body
;
private
int
lastIndexRetrieved
=
-
1
;
private
ReadListener
listener
;
public
RequestBodyCachingInputStream
(
byte
[]
body
)
{
this
.
body
=
body
;
}
@Override
public
int
read
()
throws
IOException
{
if
(
isFinished
())
{
return
-
1
;
}
int
i
=
body
[
lastIndexRetrieved
+
1
];
lastIndexRetrieved
++;
if
(
isFinished
()
&&
listener
!=
null
)
{
try
{
listener
.
onAllDataRead
();
}
catch
(
IOException
e
)
{
listener
.
onError
(
e
);
throw
e
;
}
}
return
i
;
}
@Override
public
boolean
isFinished
()
{
return
lastIndexRetrieved
==
body
.
length
-
1
;
}
@Override
public
boolean
isReady
()
{
return
isFinished
();
}
@Override
public
void
setReadListener
(
ReadListener
listener
)
{
if
(
listener
==
null
)
{
throw
new
IllegalArgumentException
(
"listener cann not be null"
);
}
if
(
this
.
listener
!=
null
)
{
throw
new
IllegalArgumentException
(
"listener has been set"
);
}
this
.
listener
=
listener
;
if
(!
isFinished
())
{
try
{
listener
.
onAllDataRead
();
}
catch
(
IOException
e
)
{
listener
.
onError
(
e
);
}
}
else
{
try
{
listener
.
onAllDataRead
();
}
catch
(
IOException
e
)
{
listener
.
onError
(
e
);
}
}
}
@Override
public
int
available
()
throws
IOException
{
return
body
.
length
-
lastIndexRetrieved
-
1
;
}
@Override
public
void
close
()
throws
IOException
{
lastIndexRetrieved
=
body
.
length
-
1
;
body
=
null
;
}
}
}
\ No newline at end of file
//package com.makeit.api.external.filter;
//
//import org.apache.commons.io.IOUtils;
//
//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.IOException;
//import java.io.InputStreamReader;
//
///**
// * @Description: 解决request.getInputStream()只能读取一次的问题
// * @PackageName: net.dlet.dhdemo.utils.dhutils
// * @Name: MyRequestWrapper
// * @Author: cure
// * @CreateDate: 2020/09/06 4:44
// * @ModifyUser:
// * @ModifyDate:
// * @ModifyDesc: 修改内容
// * @DayNameFull: 星期日
// * @ProjectName: dhdemo
// * @Version: 1.0
// **/
//public class MyRequestWrapper extends HttpServletRequestWrapper {
//
// private volatile byte[] body;
//
// public MyRequestWrapper(HttpServletRequest request) throws IOException {
// super(request);
// body = IOUtils.toByteArray(super.getInputStream());
// }
//
// public byte[] getBody() {
// return body;
// }
//
// public void setBody(byte[] body) {
// this.body = body;
// }
//
// @Override
// public BufferedReader getReader() throws IOException {
// return new BufferedReader(new InputStreamReader(getInputStream()));
// }
//
// @Override
// public ServletInputStream getInputStream() throws IOException {
// return new RequestBodyCachingInputStream(body);
// }
//
// private class RequestBodyCachingInputStream extends ServletInputStream {
// private byte[] body;
// private int lastIndexRetrieved = -1;
// private ReadListener listener;
//
// public RequestBodyCachingInputStream(byte[] body) {
// this.body = body;
// }
//
// @Override
// public int read() throws IOException {
// if (isFinished()) {
// return -1;
// }
// int i = body[lastIndexRetrieved + 1];
// lastIndexRetrieved++;
// if (isFinished() && listener != null) {
// try {
// listener.onAllDataRead();
// } catch (IOException e) {
// listener.onError(e);
// throw e;
// }
// }
// return i;
// }
//
// @Override
// public boolean isFinished() {
// return lastIndexRetrieved == body.length - 1;
// }
//
// @Override
// public boolean isReady() {
// return isFinished();
// }
//
// @Override
// public void setReadListener(ReadListener listener) {
// if (listener == null) {
// throw new IllegalArgumentException("listener cann not be null");
// }
// if (this.listener != null) {
// throw new IllegalArgumentException("listener has been set");
// }
// this.listener = listener;
// if (!isFinished()) {
// try {
// listener.onAllDataRead();
// } catch (IOException e) {
// listener.onError(e);
// }
// } else {
// try {
// listener.onAllDataRead();
// } catch (IOException e) {
// listener.onError(e);
// }
// }
// }
//
// @Override
// public int available() throws IOException {
// return body.length - lastIndexRetrieved - 1;
// }
//
// @Override
// public void close() throws IOException {
// lastIndexRetrieved = body.length - 1;
// body = null;
// }
// }
//}
\ No newline at end of file
server-api/src/main/java/com/makeit/api/external/filter/RequestReplaceFilter.java
View file @
226c869e
package
com
.
makeit
.
api
.
external
.
filter
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.filter.OncePerRequestFilter
;
import
javax.servlet.FilterChain
;
import
javax.servlet.ServletException
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
/**
* @Description:
* @PackageName: net.dlet.dhdemo.configure
* @Name: RequestReplaceFilter
* @Author: cure
* @CreateDate: 2020/09/06 4:58
* @ModifyUser:
* @ModifyDate:
* @ModifyDesc: 修改内容
* @DayNameFull: 星期日
* @ProjectName: dhdemo
* @Version: 1.0
**/
@Component
public
class
RequestReplaceFilter
extends
OncePerRequestFilter
{
@Override
protected
void
doFilterInternal
(
HttpServletRequest
request
,
HttpServletResponse
response
,
FilterChain
filterChain
)
throws
ServletException
,
IOException
{
if
(!(
request
instanceof
MyRequestWrapper
))
{
request
=
new
MyRequestWrapper
(
request
);
}
filterChain
.
doFilter
(
request
,
response
);
}
}
\ No newline at end of file
//package com.makeit.api.external.filter;
//
//import org.springframework.stereotype.Component;
//import org.springframework.web.filter.OncePerRequestFilter;
//
//import javax.servlet.FilterChain;
//import javax.servlet.ServletException;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//
///**
// * @Description:
// * @PackageName: net.dlet.dhdemo.configure
// * @Name: RequestReplaceFilter
// * @Author: cure
// * @CreateDate: 2020/09/06 4:58
// * @ModifyUser:
// * @ModifyDate:
// * @ModifyDesc: 修改内容
// * @DayNameFull: 星期日
// * @ProjectName: dhdemo
// * @Version: 1.0
// **/
//@Component
//public class RequestReplaceFilter extends OncePerRequestFilter {
//
// @Override
// protected void doFilterInternal(HttpServletRequest request,
// HttpServletResponse response,
// FilterChain filterChain) throws ServletException, IOException {
// if (!(request instanceof MyRequestWrapper)) {
// request = new MyRequestWrapper(request);
// }
// filterChain.doFilter(request, response);
// }
//}
//
//
\ No newline at end of file
server-api/src/main/java/com/makeit/api/external/filter/SignAuthFilter.java
View file @
226c869e
package
com
.
makeit
.
api
.
external
.
filter
;
import
com.makeit.api.external.util.RSAUtils
;
import
com.makeit.utils.old.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
javax.servlet.*
;
import
javax.servlet.annotation.WebFilter
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.nio.charset.StandardCharsets
;
@WebFilter
(
urlPatterns
=
{
"/iot/external/*"
})
public
class
SignAuthFilter
implements
Filter
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
SignAuthFilter
.
class
);
@Override
public
void
init
(
FilterConfig
filterConfig
)
{
}
@Override
public
void
doFilter
(
ServletRequest
req
,
ServletResponse
res
,
FilterChain
chain
)
throws
IOException
{
HttpServletRequest
request
=
(
HttpServletRequest
)
req
;
HttpServletResponse
response
=
(
HttpServletResponse
)
res
;
try
{
String
sign
=
request
.
getHeader
(
"sign"
);
if
(
StringUtils
.
isEmpty
(
sign
))
{
response
.
sendError
(
403
,
"Forbidden"
);
return
;
}
logger
.
info
(
"getted Authorization is ---> "
+
sign
);
// 获取客户端ip
/* String ip = IpUtil.getIpAddr(request);
logger.info("getted ip is ---> " + ip);*/
MyRequestWrapper
requestWrapper
=
new
MyRequestWrapper
(
request
);
String
bodyString
=
new
String
(
requestWrapper
.
getBody
(),
StandardCharsets
.
UTF_8
);
logger
.
info
(
"getted requestbody data is ---> "
+
bodyString
);
String
decryptJson
=
RSAUtils
.
privateDecrypt
(
sign
,
RSAUtils
.
getPrivateKey
(
RSAUtils
.
PRIVATE_KEY
),
"UTF-8"
);
boolean
couldPass
=
decryptJson
.
equals
(
bodyString
);
if
(
couldPass
)
{
// 放行
chain
.
doFilter
(
requestWrapper
,
response
);
return
;
}
response
.
sendError
(
403
,
"Forbidden"
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"验证失败: -> "
+
e
.
getMessage
(),
e
);
response
.
sendError
(
403
,
"Forbidden"
);
}
}
@Override
public
void
destroy
()
{
}
}
//
package com.makeit.api.external.filter;
//
//
import com.makeit.api.external.util.RSAUtils;
//
import com.makeit.utils.old.StringUtils;
//
import org.slf4j.Logger;
//
import org.slf4j.LoggerFactory;
//
//
import javax.servlet.*;
//
import javax.servlet.annotation.WebFilter;
//
import javax.servlet.http.HttpServletRequest;
//
import javax.servlet.http.HttpServletResponse;
//
import java.io.IOException;
//
import java.nio.charset.StandardCharsets;
//
//
//
@WebFilter(urlPatterns = { "/iot/external/*"})
//
public class SignAuthFilter implements Filter {
//
//
private static Logger logger = LoggerFactory.getLogger(SignAuthFilter.class);
//
//
//
//
@Override
//
public void init(FilterConfig filterConfig) {
//
}
//
//
@Override
//
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
//
throws IOException {
//
HttpServletRequest request = (HttpServletRequest) req;
//
HttpServletResponse response = (HttpServletResponse) res;
//
try {
//
String sign = request.getHeader("sign");
//
if (StringUtils.isEmpty(sign)) {
//
response.sendError(403, "Forbidden");
//
return;
//
}
//
logger.info("getted Authorization is ---> " + sign);
//
//
// 获取客户端ip
/
//
* String ip = IpUtil.getIpAddr(request);
//
logger.info("getted ip is ---> " + ip);*/
//
//
MyRequestWrapper requestWrapper = new MyRequestWrapper(request);
//
String bodyString = new String(requestWrapper.getBody(), StandardCharsets.UTF_8);
//
logger.info("getted requestbody data is ---> " + bodyString);
//
//
String decryptJson = RSAUtils.privateDecrypt(sign, RSAUtils.getPrivateKey(RSAUtils.PRIVATE_KEY), "UTF-8");
//
//
boolean couldPass = decryptJson.equals(bodyString);
//
if (couldPass) {
//
// 放行
//
chain.doFilter(requestWrapper, response);
//
return;
//
}
//
response.sendError(403, "Forbidden");
//
} catch (Exception e) {
//
logger.error("验证失败: -> " + e.getMessage(), e);
//
response.sendError(403, "Forbidden");
//
}
//
}
//
//
@Override
//
public void destroy() {
//
//
}
//
//
}
//
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