过滤器中的写法
String[] uris = request.getRequestURI().split("/");
BodyReaderHttpServletRequestWrapper requestWrapper = null;
try {
String appInterface = uris[uris.length - 1];
requestWrapper = new BodyReaderHttpServletRequestWrapper(request);
String paramString = requestWrapper.getRequestParams(requestWrapper);
if (logger.isDebugEnabled()) {
logger.debug("接口调用传入信息:", paramString);
}
JSONObject params = JSONObject.parseObject(paramString);
Integer userid = params.getInteger("userid");
String devcode = RequestUtils.getDevCode(request);
if(!filterService.comparisonDevcode(userid,devcode)){
ResponseUtils.writeResult(request, response, new ResultBean("8888", "0|该设备已在别处登录!",configInfoService.readSingleConfigFromMemcached("app_h5_page", "logout_reason_newdevicelogin")));
return;
}
//false的话就是验证没有通过
if (!filterService.ApiFilter(appInterface, paramString)) {
ResponseUtils.writeResult(request, response, new ResultBean("9999", "0|验证失败", configInfoService.readSingleConfigFromMemcached("app_h5_page", "logout_reason_tokenexpired")));
return;
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
用一个新的类(BodyReaderHttpServletRequestWrapper),替换原本的request
package com.oruit.app.util;
import java.io.*;
import java.nio.charset.Charset;
import java.util.Enumeration;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class BodyReaderHttpServletRequestWrapper extends
HttpServletRequestWrapper {
private final byte[] body;
public BodyReaderHttpServletRequestWrapper(HttpServletRequest request) throws Exception {
super(request);
Enumeration e = request.getHeaderNames();
while(e.hasMoreElements()){
String name = (String) e.nextElement();
String value = request.getHeader(name);
}
body = getRequestParams(request).getBytes(Charset.forName("UTF-8"));
}
@Override
public BufferedReader getReader() throws IOException {
return new BufferedReader(new InputStreamReader(getInputStream()));
}
@Override
public ServletInputStream getInputStream() throws IOException {
final ByteArrayInputStream bais = new ByteArrayInputStream(body);
return 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 bais.read();
}
};
}
@Override
public String getHeader(String name) {
return super.getHeader(name);
}
@Override
public Enumeration<String> getHeaderNames() {
return super.getHeaderNames();
}
@Override
public Enumeration<String> getHeaders(String name) {
return super.getHeaders(name);
}
/**
* 读接口请求流 , 并转换成JSONObject
*
* @param request
* @return
* @throws UnsupportedEncodingException
* @throws IOException
*/
public String getRequestParams(HttpServletRequest request) throws Exception {
BufferedReader bufferedReader = request.getReader();
StringBuilder builder = new StringBuilder();
String line = "";
while ((line = bufferedReader.readLine()) != null) {
builder.append(line);
}
bufferedReader.close();
return builder.toString();
}
}