Click here to Skip to main content
15,889,992 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
For a project I have to
1.Modify the web.xml to turn off the three test filter filters and turn on the LogResponsesCookiesFilter filter.
2.Modify the LogResponsesCookiesFilter. The filter I implemented needs to add an additional cookie using the filter’s name as the cookie name. The content of this cookie will be my name.
I have already did step one. I need help with step2.

What I have tried:

Java
web.xml

XML
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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_3_0.xsd">
    <filter>
        <filter-name>TestFilter1</filter-name>
        <filter-class>filter.TestFilter1</filter-class>
    </filter>
    <filter>
        <filter-name>TestFilter2</filter-name>
        <filter-class>filter.TestFilter2</filter-class>
    </filter>
    <filter>
        <filter-name>TestFilter3</filter-name>
        <filter-class>filter.TestFilter3</filter-class>
    </filter>
    <filter>
        <filter-name>TestInitParamsFilter</filter-name>
        <filter-class>filter.TestInitParamsFilter</filter-class>
        <init-param>
            <param-name>logFilename</param-name>
            <param-value>test_init_params.log</param-value>
        </init-param>
    </filter>
    <filter>
        <filter-name>LogRequestFilter</filter-name>
        <filter-class>murach.filters.LogRequestFilter</filter-class>
    </filter>
    <filter>
        <filter-name>LogResponseFilter</filter-name>
        <filter-class>murach.filters.LogResponseFilter</filter-class>
    </filter>
    <filter>
        <filter-name>LogResponseCookiesFilter</filter-name>
        <filter-class>murach.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>
        <servlet-name>DownloadServlet</servlet-name>
    </filter-mapping>
    <filter-mapping>
        <filter-name>TestInitParamsFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    -->
    <!-- 
    <filter-mapping>
        <filter-name>LogResponseFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>
    -->
    <filter-mapping>
        <filter-name>LogResponseCookiesFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>
    <servlet>
        <servlet-name>DownloadServlet</servlet-name>
        <servlet-class>download.DownloadServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DownloadServlet</servlet-name>
        <url-pattern>/download</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>


LogResponsesCookiesFilter.java

Java
package filter;

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class LogResponseCookiesFilter implements Filter {

    private FilterConfig filterConfig = null;

    @Override
    public void init(FilterConfig filterConfig) {
        this.filterConfig = filterConfig;
    }

    @Override
    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);
    }

    @Override
    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
        @Override
        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);
        }
    }
}
Posted

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900