Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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