可以在controller 前进行拦截,但request wrapper 不可传给controller, 如果request body需要继续传递,可以使用filter
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.hp.ccue.identity.utilities.InternalServerTokenRequestWrapper;
public class InternalServerTokenIntercepter extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
InternalServerTokenRequestWrapper authRequestWrapper = new InternalServerTokenRequestWrapper((HttpServletRequest) request);
String body = authRequestWrapper.getBody();
String clientIP = authRequestWrapper.getRemoteHost();
int clientPort = request.getRemotePort();
String uri = authRequestWrapper.getRequestURI();
System.out.println(body);
System.out.println(clientIP);
System.out.println(clientPort);
System.out.println(uri);
request = (HttpServletRequest)authRequestWrapper;
return true;
}
}
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class InternalServerTokenRequestWrapper
extends
HttpServletRequestWrapper {
private final String body;
public InternalServerTokenRequestWrapper(HttpServletRequest request)
throws IOException {
super(request);
StringBuilder stringBuilder = new StringBuilder();
BufferedReader bufferedReader = null;
try {
InputStream inputStream = request.getInputStream();
if (inputStream != null) {
bufferedReader = new BufferedReader(
new InputStreamReader(inputStream));
char[] charBuffer = new char[1024];
int bytesRead = -1;
while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
stringBuilder.append(charBuffer, 0, bytesRead);
}
} else {
stringBuilder.append("");
}
} catch (IOException e) {
throw e;
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {
throw e;
}
}
}
body = stringBuilder.toString();
}
@Override
public ServletInputStream getInputStream() throws IOException {
final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(
body.getBytes());
ServletInputStream servletInputStream = new ServletInputStream() {
public int read() throws IOException {
return byteArrayInputStream.read();
}
};
return servletInputStream;
}
@Override
public BufferedReader getReader() throws IOException {
return new BufferedReader(new InputStreamReader(this.getInputStream()));
}
public String getBody() {
return this.body;
}
}
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/api/public/auth" />
<ref bean="internalSvrTokenIntercepter" />
</mvc:interceptor>
</mvc:interceptors>