I would to know if I Modify the web.xml correctly where I have to turn off the t
ID: 3571592 • Letter: I
Question
I would to know if I Modify the web.xml correctly where I have to turn off the three filters and turn on the LogResponseCookiesFilter Filter.
The original web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>TestFilter1</filter-name>
<filter-class>filters.TestFilter1</filter-class>
</filter>
<filter>
<filter-name>TestFilter2</filter-name>
<filter-class>filters.TestFilter2</filter-class>
</filter>
<filter>
<filter-name>TestFilter3</filter-name>
<filter-class>filters.TestFilter3</filter-class>
</filter>
<filter>
</filter>
<filter-mapping>
<filter-name>TestFilter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>TestFilter2</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>TestFilter3</filter-name>
<filter-mapping>
<filter-mapping>
<servlet-name>CheckUserServlet</servlet-name>
</filter-mapping>
<servlet>
<servlet-name>CheckUserServlet</servlet-name>
<servlet-class>download.CheckUserServlet
</servlet-class>
</servlet>
<!-- The rest of the servlet elements go here -->
<servlet-mapping>
<servlet-name>CheckUserServlet</servlet-name>
<url-pattern>/checkUser</url-pattern>
</servlet-mapping>
</web-app>
My modified web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>TestFilter1</filter-name>
<filter-class>filters.TestFilter1</filter-class>
</filter>
<filter>
<filter-name>TestFilter2</filter-name>
<filter-class>filters.TestFilter2</filter-class>
</filter>
<filter>
<filter-name>TestFilter3</filter-name>
<filter-class>filters.TestFilter3</filter-class>
</filter>
<filter>
<filter-name>LogResponseCookiesFilter</filter-name>
<filter-class>filters.LogResponseCookiesFilter</filter-class>
</filter>
<!-- <filter-mapping>
<filter-name>TestFilter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>TestFilter2</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>TestFilter3</filter-name>-->
<filter-mapping>
<filter-name>LogResponseCookiesFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<servlet-name>CheckUserServlet</servlet-name>
</filter-mapping>
<servlet>
<servlet-name>CheckUserServlet</servlet-name>
<servlet-class>download.CheckUserServlet
</servlet-class>
</servlet>
<!-- The rest of the servlet elements go here -->
<servlet-mapping>
<servlet-name>CheckUserServlet</servlet-name>
<url-pattern>/checkUser</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
Next questions is if my web.xml is correct, Modify the LogResponseCookiesFilter. The filter you implemented needs to add an additional cookie using the filter's name as the cookie name. The content of this cookie will be your name.
package filter;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class LogResponseCookiesFilter implements Filter
{
private FilterConfig filterConfig = null;
public void init(FilterConfig filterConfig)
{
this.filterConfig = filterConfig;
}
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException,
ServletException
{
HttpServletResponse httpResponse =
(HttpServletResponse) response;
ResponseCookiesWrapper wrappedResponse =
new ResponseCookiesWrapper(httpResponse);
chain.doFilter(request, wrappedResponse);
HttpServletRequest httpRequest =
(HttpServletRequest) request;
ServletContext sc =
filterConfig.getServletContext();
String filterName = filterConfig.getFilterName();
String servletPath = "Servlet path: " +
httpRequest.getServletPath();
ArrayList<Cookie> cookies =
wrappedResponse.getCookies();
String cookiesString = "";
for (Cookie c : cookies)
cookiesString += c.getName() + "=" +
c.getValue() + " ";
sc.log(filterName + " | " + servletPath +
" | cookies: " + cookiesString);
}
public void destroy()
{
filterConfig = null;
}
class ResponseCookiesWrapper
extends HttpServletResponseWrapper
{
private ArrayList<Cookie> cookies = null;
public ResponseCookiesWrapper(
HttpServletResponse response)
{
super(response);
cookies = new ArrayList<Cookie>();
}
// provide a new method
// for the ResponseWrapper class
public ArrayList<Cookie> getCookies()
{
return cookies;
}
// override the addCookie method of the
// HttpServletResponse object
public void addCookie(Cookie cookie)
{
// store the cookie in the response wrapper
// object
cookies.add(cookie);
// store the cookie in the original response
// object
HttpServletResponse httpResponse =
(HttpServletResponse) this.getResponse();
httpResponse.addCookie(cookie);
}
}
}
Explanation / Answer
If you want to modify web.xml need to go to the server first then only we can modify otherwise it is not possible. If you do it on your server just look at the build XML files in the source