Filtering the URL

Please help on this program ,

import java.io.IOException;

import java.net.URLDecoder;

import java.util.Enumeration;

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.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public abstract class RedirectFilter implements Filter {

private FilterConfig filterConfig;

java.util.Properties prop;

public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws ServletException,IOException

{

HttpServletRequest servletrequest = (HttpServletRequest)req;

HttpServletResponse servletresponse = (HttpServletResponse)res;

String reqURI = servletrequest.getRequestURI();

Enumeration checkcharacters = servletrequest.getParameterNames();

boolean flag1 = false;

String key="";

String value="";

try

{

while(checkcharacters.hasMoreElements())

{

key=(String)checkcharacters.nextElement();

value=URLDecoder.decode(servletrequest.getParameter(key));

if(value.indexOf("<")>=0||value.indexOf(">")>=0||

value.indexOf("\"")>=0||value.indexOf("'")>=0||

value.indexOf("(")>=0||value.indexOf(")")>=0||

value.indexOf("&")>=0||value.indexOf("+")>=0 ||

value.indexOf("%")>=0 ||value.indexOf(";")>=0 ||

value.indexOf("~")>=0 ||value.indexOf("`")>=0 ||

value.indexOf("@")>=0 ||value.indexOf("#")>=0 ||

value.indexOf("$")>=0 ||value.indexOf("%")>=0 ||

value.indexOf("^")>=0 ||value.indexOf("[")>=0 ||

value.indexOf("]")>=0 ||value.indexOf("|")>=0 ||

value.indexOf("?")>=0 ||value.indexOf(".")>=0 ||

value.indexOf(",")>=0 ||value.indexOf("&lt")>=0 ||

value.indexOf("%")>=0 ||value.indexOf("")>=0 ||

value.indexOf("&gt")>=0 ||value.indexOf("\\")>=0 ||

value.indexOf(":")>=0)

servletresponse.sendRedirect("/portal/error404.htm");

}

chain.doFilter(servletrequest,servletresponse);

return;

}

catch(Exception e)

{

e.printStackTrace();

}

}

public FilterConfig getFilterConfig()

{

return this.filterConfig;

}

public void setFilterConfig (FilterConfig filterConfig)

{

this.filterConfig = filterConfig;

}

}

import java.io.IOException;

import java.net.URLDecoder;

import java.util.Enumeration;

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.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public abstract class RedirectFilter implements Filter {

private FilterConfig filterConfig;

java.util.Properties prop;

public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws ServletException,IOException

{

HttpServletRequest servletrequest = (HttpServletRequest)req;

HttpServletResponse servletresponse = (HttpServletResponse)res;

String reqURI = servletrequest.getRequestURI();

Enumeration checkcharacters = servletrequest.getParameterNames();

boolean flag1 = false;

String key="";

String value="";

try

{

while(checkcharacters.hasMoreElements())

{

key=(String)checkcharacters.nextElement();

value=URLDecoder.decode(servletrequest.getParameter(key));

if(value.indexOf("<")>=0||value.indexOf(">")>=0||

value.indexOf("\"")>=0||value.indexOf("'")>=0||

value.indexOf("(")>=0||value.indexOf(")")>=0||

value.indexOf("&")>=0||value.indexOf("+")>=0 ||

value.indexOf("%")>=0 ||value.indexOf(";")>=0 ||

value.indexOf("~")>=0 ||value.indexOf("`")>=0 ||

value.indexOf("@")>=0 ||value.indexOf("#")>=0 ||

value.indexOf("$")>=0 ||value.indexOf("%")>=0 ||

value.indexOf("^")>=0 ||value.indexOf("[")>=0 ||

value.indexOf("]")>=0 ||value.indexOf("|")>=0 ||

value.indexOf("?")>=0 ||value.indexOf(".")>=0 ||

value.indexOf(",")>=0 ||value.indexOf("&lt")>=0 ||

value.indexOf("%")>=0 ||value.indexOf("")>=0 ||

value.indexOf("&gt")>=0 ||value.indexOf("\\")>=0 ||

value.indexOf(":")>=0)

servletresponse.sendRedirect("/portal/error404.htm");

}

chain.doFilter(servletrequest,servletresponse);

return;

}

catch(Exception e)

{

e.printStackTrace();

}

}

public FilterConfig getFilterConfig()

{

return this.filterConfig;

}

public void setFilterConfig (FilterConfig filterConfig)

{

this.filterConfig = filterConfig;

}

}

it throw fallowing exception,Please help on this ..

java.lang.IllegalStateException: response already committed

at weblogic.servlet.internal.ServletResponseImpl.sendRedirect(ServletResponseImpl.java:554)

at RedirectFilter.doFilter(RedirectFilter.java:79)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)

at RedirectFilter.doFilter(RedirectFilter.java:84) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)

at eblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:2771)

at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2433)

at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:172)

at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:145)

[6082 byte] By [sreenivaspallaua] at [2007-11-27 9:37:24]
# 1
Add a 'return' statement right after the sendRedirect(). You can send/commit a response only once and not multiple times.
BalusCa at 2007-7-12 23:08:38 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 2
it getting the same problem,
sreenivaspallaua at 2007-7-12 23:08:38 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 3

Then you're doing something wrong.

If you invoke sendRedirect(), you should *not* execute any code afterwards which writes to the response, e.g. invoking the sendRedirect() again (in the while loop) or invoking the doFilter().

Example:while (condition) {

if (condition) {

response.sendRedirect(url);

return; // Add this line. Otherwise the while loop will continue and the sendRedirect may be re-invoked again,

// which is not permitted. Or the doFilter() will be invoked, which is also not permitted.

}

}

BalusCa at 2007-7-12 23:08:38 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...