package xxx.xxx.xxx;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.sun.xml.internal.ws.util.ByteArrayBuffer;
/**
*
* @author Atul Kumar
*/
public class AuthenticationFilter implements Filter {
private final Log log = LogFactory.getLog(this.getClass());
private static final int buffSize = 4096;
@Override
public void destroy() {
log.debug("Authentication Filter Destroyed");
}
// convert InputStream to String
private static String getStringFromInputStream(HttpServletRequestWrapperX httpRequest) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
IOUtils.copy(httpRequest.getInputStream(), baos);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
byte[] bytes = baos.toByteArray();
return new String(bytes);
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
log.info("Authentication Filter doFilter called");
// HttpServletRequest httpRequest2 = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
HttpServletRequestWrapperX httpRequest = new HttpServletRequestWrapperX(
(HttpServletRequest) request);
log.debug("In filter - " + getStringFromInputStream(httpRequest));
filterChain.doFilter(httpRequest, response);
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
log.info("Authentication Filter Initialized");
}
private static class HttpServletRequestWrapperX
extends
HttpServletRequestWrapper {
private final String body;
public HttpServletRequestWrapperX(HttpServletRequest request) {
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[128];
int bytesRead = -1;
while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
stringBuilder.append(charBuffer, 0, bytesRead);
}
} else {
stringBuilder.append("");
}
} catch (IOException ex) {
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException ex) {
}
}
}
body = stringBuilder.toString();
}
@Override
public ServletInputStream getInputStream() throws IOException {
final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(
body.getBytes());
ServletInputStream inputStream = new ServletInputStream() {
public int read() throws IOException {
return byteArrayInputStream.read();
}
};
return inputStream;
}
}
}
No comments:
Post a Comment