Как добавить добавить дополнительный файл cookie, используя имя фильтра в качестве имени файла cookie, а содержимое этого файла cookie - мое имя.
Для проекта я должен
1. измените web.xml чтобы отключить три тестовых фильтра фильтра и включить фильтр LogResponsesCookiesFilter.
2.Изменить LogResponsesCookiesFilter. Фильтр, который я реализовал, должен добавить дополнительный файл cookie, используя имя фильтра в качестве имени файла cookie. Содержимым этого куки будет мое имя.
Я уже сделал первый шаг. Мне нужна помощь с шагом 2.
Что я уже пробовал:
web.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
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); } } }