1.Modify the web.xml to turn off the three test filter filters and turn on the L
ID: 3779964 • Letter: 1
Question
1.Modify the web.xml to turn off the three test filter filters and turn on the LogResponsesCookiesFilter filter.
2.Note how the filter works with the cookies.
3.Modify the LogResponsesCookiesFilter. 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.
TestFilter1, 2 and 3
package filters;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class TestFilter1 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
{
HttpServletRequest httpRequest =
(HttpServletRequest) request;
HttpServletResponse httpResponse =
(HttpServletResponse) response;
ServletContext sc =
filterConfig.getServletContext();
String filterName = filterConfig.getFilterName();
String servletPath = "Servlet path: " +
httpRequest.getServletPath();
sc.log(filterName + " | " + servletPath +
" | before request");
chain.doFilter(httpRequest, httpResponse);
sc.log(filterName + " | " + servletPath +
" | after request");
}
public void destroy()
{
filterConfig = null;
}
}
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-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>
<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>
<!-- The rest of the web.xml file goes here -->
</web-app>
Request side processing
package filters;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class LogRequestFilter 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
{
HttpServletRequest httpRequest =
(HttpServletRequest) request;
ServletContext sc =
filterConfig.getServletContext();
String logString =
filterConfig.getFilterName() + " | ";
logString += "Servlet path: "
+ httpRequest.getServletPath() + " | ";
Cookie[] cookies = httpRequest.getCookies();
String emailAddress =
util.CookieUtil.getCookieValue(
cookies, "emailCookie");
logString += "Email cookie: ";
if (emailAddress.length() != 0)
logString += emailAddress;
else
logString += "Not found";
sc.log(logString);
chain.doFilter(httpRequest, response);
}
public void destroy()
{
filterConfig = null;
}
}
Response side filter
package filters;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class LogResponseFilter 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
{
chain.doFilter(request, response);
HttpServletRequest httpRequest =
(HttpServletRequest) request;
HttpServletResponse httpResponse =
(HttpServletResponse) response;
ServletContext sc =
filterConfig.getServletContext();
String logString = filterConfig.getFilterName()
+ " | ";
logString += "Servlet path: " +
httpRequest.getServletPath() + " | ";
logString += "Content type: " +
httpResponse.getContentType();
sc.log(logString);
}
public void destroy()
{
filterConfig = null;
}
}
Custom response
package filters;
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);
}
}
TestFilter1, 2 and 3
package filters;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class TestFilter1 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
{
HttpServletRequest httpRequest =
(HttpServletRequest) request;
HttpServletResponse httpResponse =
(HttpServletResponse) response;
ServletContext sc =
filterConfig.getServletContext();
String filterName = filterConfig.getFilterName();
String servletPath = "Servlet path: " +
httpRequest.getServletPath();
sc.log(filterName + " | " + servletPath +
" | before request");
chain.doFilter(httpRequest, httpResponse);
sc.log(filterName + " | " + servletPath +
" | after request");
}
public void destroy()
{
filterConfig = null;
}
}
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-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>
<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>
<!-- The rest of the web.xml file goes here -->
</web-app>
Request side processing
package filters;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class LogRequestFilter 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
{
HttpServletRequest httpRequest =
(HttpServletRequest) request;
ServletContext sc =
filterConfig.getServletContext();
String logString =
filterConfig.getFilterName() + " | ";
logString += "Servlet path: "
+ httpRequest.getServletPath() + " | ";
Cookie[] cookies = httpRequest.getCookies();
String emailAddress =
util.CookieUtil.getCookieValue(
cookies, "emailCookie");
logString += "Email cookie: ";
if (emailAddress.length() != 0)
logString += emailAddress;
else
logString += "Not found";
sc.log(logString);
chain.doFilter(httpRequest, response);
}
public void destroy()
{
filterConfig = null;
}
}
Response side filter
package filters;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class LogResponseFilter 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
{
chain.doFilter(request, response);
HttpServletRequest httpRequest =
(HttpServletRequest) request;
HttpServletResponse httpResponse =
(HttpServletResponse) response;
ServletContext sc =
filterConfig.getServletContext();
String logString = filterConfig.getFilterName()
+ " | ";
logString += "Servlet path: " +
httpRequest.getServletPath() + " | ";
logString += "Content type: " +
httpResponse.getContentType();
sc.log(logString);
}
public void destroy()
{
filterConfig = null;
}
}
Custom response
package filters;
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
package filters;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public category TestFilter1 implements Filter
personal FilterConfig filterConfig = null;
public void init(FilterConfig filterConfig)
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException,
ServletException
}
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-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>
<servlet-name>CheckUserServlet</servlet-name>
</filter-mapping>
<servlet>
<servlet-name>CheckUserServlet</servlet-name>
<servlet-class>download.CheckUserServlet
</servlet-class>
</servlet>
<!-- the remainder of the servlet components go here -->
<servlet-mapping>
<servlet-name>CheckUserServlet</servlet-name>
<url-pattern>/checkUser</url-pattern>
</servlet-mapping>
<!-- the remainder of the net.xml file goes here -->
</web-app>
Request facet process
package filters;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public category LogRequestFilter implements Filter
personal FilterConfig filterConfig = null;
public void init(FilterConfig filterConfig)
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException,
ServletException
}
Custom response
package filters;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public category LogResponseCookiesFilter implements Filter
non-public FilterConfig filterConfig = null;
public void init(FilterConfig filterConfig)
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException,
ServletException
}
Response facet filter
package filters;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public category LogResponseFilter implements Filter
personal FilterConfig filterConfig = null;
public void init(FilterConfig filterConfig)
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException,
ServletException
category ResponseCookiesWrapper
extends HttpServletResponseWrapper
non-public ArrayList<Cookie> cookies = null;
public ResponseCookiesWrapper(
HttpServletResponse response)
// give a brand new technique
// for the ResponseWrapper category
public ArrayList<Cookie> getCookies()
come back cookies;
}
// override the addCookie technique of the
// HttpServletResponse object
public void addCookie(Cookie cookie)
within the response wrapper
// object
cookies.add(cookie);
// store the cookie within the original response
// object
HttpServletResponse httpResponse =
(HttpServletResponse) this.getResponse();
httpResponse.addCookie(cookie);
}
}
}
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.