package com.matrix.filter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.net.URI;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
/**
* Servlet Filter implementation class MyFilter
*/
@WebFilter("/MyFilter")
public class MyFilter implements Filter
{
private String basePath;
/**
* Default constructor.
*/
public MyFilter() {
// TODO Auto-generated constructor stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain)
{
this.basePath = getBaseURL((HttpServletRequest)request);
CheckFrameHttpServletResponseWrapper wrapper = new CheckFrameHttpServletResponseWrapper(
(HttpServletResponse) response);
try
{
filterChain.doFilter(request, wrapper);
} catch (Exception e)
{
e.printStackTrace();
}
}
public void destroy()
{
}
public void init(FilterConfig arg0) throws ServletException
{
}
private class CheckFrameHttpServletResponseWrapper extends
HttpServletResponseWrapper
{
public CheckFrameHttpServletResponseWrapper(HttpServletResponse response) {
super(response);
}
public PrintWriter getWriter() throws IOException
{
return new CheckFrameWriter(super.getWriter());
}
}
private class CheckFrameWriter extends PrintWriter
{
String checkString = "waterif";
public CheckFrameWriter(Writer out) {
super(out);
}
public void write(int c)
{
super.write((char) c);
}
public void write(char buf[], int off, int len)
{
StringBuffer sb = new StringBuffer(len);
for (int i = 0; i < len; i++)
{
sb.append(buf[off + i]);
}
String s = sb.toString();
int bodyIndex = s.indexOf("<body>");
if (bodyIndex > -1)
{
String part1 = s.substring(0, bodyIndex);
String part2 = s.substring(bodyIndex);
s = part1 + checkString + part2;
}
for (int i = 0; i < s.length(); i++)
{
write(s.charAt(i));
}
}
public void write(String s, int off, int len)
{
s = s.replaceAll("http://localhost:8090", "http://127.0.0.1:8090");
for (int i = 0; i < len; i++)
{
write(s.charAt(off + i));
}
}
}
public static String getBaseURL(HttpServletRequest request)
{
String reqPrefix = request.getRequestURL().toString();
String pathInfo = request.getPathInfo() == null ? "" : request
.getPathInfo();
// fix for CXF-898
if (!"/".equals(pathInfo) || reqPrefix.endsWith("/"))
{
StringBuilder sb = new StringBuilder();
// request.getScheme(), request.getLocalName() and
// request.getLocalPort()
// should be marginally cheaper - provided request.getLocalName()
// does
// return the actual name used in request URI as opposed to
// localhost
// consistently across the Servlet stacks
URI uri = URI.create(reqPrefix);
sb.append(uri.getScheme()).append("://")
.append(uri.getRawAuthority());
sb.append(request.getContextPath())
.append(request.getServletPath());
reqPrefix = sb.toString();
}
return reqPrefix;
}
}
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.matrix.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/services/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>