Author: nbelaevski
Date: 2008-04-09 14:34:05 -0400 (Wed, 09 Apr 2008)
New Revision: 7720
Modified:
branches/3.2.x/framework/impl/src/main/java/org/ajax4jsf/FastFilter.java
branches/3.2.x/framework/impl/src/main/java/org/ajax4jsf/Filter.java
branches/3.2.x/framework/impl/src/main/java/org/ajax4jsf/webapp/BaseFilter.java
Log:
http://jira.jboss.com/jira/browse/RF-2962
Modified: branches/3.2.x/framework/impl/src/main/java/org/ajax4jsf/FastFilter.java
===================================================================
--- branches/3.2.x/framework/impl/src/main/java/org/ajax4jsf/FastFilter.java 2008-04-09
18:28:09 UTC (rev 7719)
+++ branches/3.2.x/framework/impl/src/main/java/org/ajax4jsf/FastFilter.java 2008-04-09
18:34:05 UTC (rev 7720)
@@ -21,217 +21,7 @@
package org.ajax4jsf;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-import org.ajax4jsf.request.MultipartRequest;
-
public class FastFilter extends org.ajax4jsf.webapp.NekkoFilter {
- /** Multipart request start */
- public static final String MULTIPART = "multipart/";
-
- /** Session bean name where multipart requests map will be stored */
- public static final String REQUESTS_SESSIONS_BEAN_NAME =
"_richfaces_upload_sessions";
-
- /** Session bean name where progress bar's percent map will be stored */
- public static final String PERCENT_BEAN_NAME =
"_richfaces_upload_percents";
-
- /**
- * Request parameter that indicates if multipart request forced by rich file
- * upload component
- */
- public static final String UPLOAD_FILES_ID = "_richfaces_upload_uid";
-
- /**
- * Flag indicating whether a temporary file should be used to cache the
- * uploaded file
- */
- private boolean createTempFiles = false;
-
- /**
- * The maximum size of a file upload request. 0 means no limit.
- */
- private int maxRequestSize = 0;
-
- /***************************************************************************
- * Method catches upload files request. Request parameter
- * <b>org.ajax4jsf.Filter.UPLOAD_FILES_ID</b> indicates if request
- * generated by rich-upload component. If it was detected custom parsing
- * request should be done. Processing information about percent of
- * completion and file size will be put into session scope. In other case
- * super filter's method will be invoked for request processing.
- *
- * @param request
- * @param response
- * @param chain
- */
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException {
- if (!(response instanceof HttpServletResponse)) {
- chain.doFilter(request, response);
- return;
- }
-
- HttpServletRequest httpRequest = (HttpServletRequest) request;
- String uid = httpRequest.getParameter(UPLOAD_FILES_ID);
- if (uid != null) {
- if (isMultipartRequest(httpRequest)) {
- MultipartRequest multipartRequest = new MultipartRequest(
- httpRequest, createTempFiles, maxRequestSize, uid);
-
- Map<String, MultipartRequest> sessionsMap = null;
- Map<String, Object> percentMap = null;
- try {
- if (isFileSizeRestricted(request, maxRequestSize)) {
- printResponse(response,
- "<html
id=\"_richfaces_file_upload_size_restricted\"></html>");
- } else if (!checkFileCount(httpRequest)) {
- printResponse(response,
- "<html
id=\"_richfaces_file_upload_forbidden\"></html>");
- } else {
- HttpSession session = httpRequest.getSession();
- synchronized (session) {
- sessionsMap = (Map<String, MultipartRequest>) session
- .getAttribute(REQUESTS_SESSIONS_BEAN_NAME);
- percentMap = (Map<String, Object>) session
- .getAttribute(PERCENT_BEAN_NAME);
- if (sessionsMap == null) {
- sessionsMap = Collections
- .synchronizedMap(new HashMap<String, MultipartRequest>());
- session.setAttribute(
- REQUESTS_SESSIONS_BEAN_NAME,
- sessionsMap);
- }
- if (percentMap == null) {
- percentMap = new HashMap<String, Object>();
- session.setAttribute(PERCENT_BEAN_NAME,
- percentMap);
- }
- }
- percentMap.put(uid, 0); // associate percent value with
- // file
- // entry uid
- sessionsMap.put(uid, multipartRequest);
-
- if (multipartRequest.parseRequest()) {
- super.doFilter(multipartRequest, response, chain);
- } else {
- printResponse(response,
- "<html
id=\"_richfaces_file_upload_stopped\"></html>");
- }
- }
- } finally {
- if (sessionsMap != null) {
- sessionsMap.remove(uid);
- percentMap.remove(uid);
- }
- }
- } else {
- if ("stop".equals(httpRequest.getParameter("action"))) {
- HttpSession session = httpRequest.getSession();
- Map<String, MultipartRequest> sessions = (Map<String, MultipartRequest>)
session
- .getAttribute(REQUESTS_SESSIONS_BEAN_NAME);
-
- if (sessions != null) {
- MultipartRequest multipartRequest = sessions.get(uid);
- if (multipartRequest != null) {
- multipartRequest.stop();
- HttpServletResponse httpResponse = (HttpServletResponse) response;
- httpResponse
- .setStatus(HttpServletResponse.SC_NO_CONTENT);
- httpResponse.getOutputStream().close();
- }
- }
- } else {
- super.doFilter(request, response, chain);
- }
- }
- } else {
- super.doFilter(request, response, chain);
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.ajax4jsf.webapp.BaseFilter#init(javax.servlet.FilterConfig)
- */
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
- super.init(filterConfig);
- String param = filterConfig.getInitParameter("createTempFiles");
- if (param != null) {
- this.createTempFiles = Boolean.parseBoolean(param);
- }else {
- this.createTempFiles = true;
- }
- param = filterConfig.getInitParameter("maxRequestSize");
- if (param != null) {
- this.maxRequestSize = Integer.parseInt(param);
- }
- }
-
- private boolean isMultipartRequest(HttpServletRequest request) {
- if (!"post".equals(request.getMethod().toLowerCase())) {
- return false;
- }
-
- String contentType = request.getContentType();
- if (contentType == null) {
- return false;
- }
-
- if (contentType.toLowerCase().startsWith(MULTIPART)) {
- return true;
- }
-
- return false;
- }
-
- private boolean isFileSizeRestricted(ServletRequest request, int maxSize) {
- if (maxSize != 0 && request.getContentLength() > maxSize) {
- return true;
- }
- return false;
- }
-
- private boolean checkFileCount(HttpServletRequest request) {
- HttpSession session = request.getSession();
- Map<String, Integer> map = (Map<String, Integer>) session
- .getAttribute(Filter.UPLOADED_COUNTER);
- if (map != null) {
- String id = request.getParameter("id");
- if (id != null) {
- Integer i = map.get(id);
- if (i != null && i == 0) {
- return false;
- }
- }
- }
- return true;
- }
-
- private void printResponse(ServletResponse response, String message)
- throws IOException {
- HttpServletResponse httpResponse = (HttpServletResponse) response;
- httpResponse.setStatus(HttpServletResponse.SC_OK);
- httpResponse.setContentType("text/html");
- PrintWriter writer = httpResponse.getWriter();
- writer.write(message);
- writer.close();
- }
-
}
Modified: branches/3.2.x/framework/impl/src/main/java/org/ajax4jsf/Filter.java
===================================================================
--- branches/3.2.x/framework/impl/src/main/java/org/ajax4jsf/Filter.java 2008-04-09
18:28:09 UTC (rev 7719)
+++ branches/3.2.x/framework/impl/src/main/java/org/ajax4jsf/Filter.java 2008-04-09
18:34:05 UTC (rev 7720)
@@ -21,22 +21,6 @@
package org.ajax4jsf;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-import org.ajax4jsf.request.MultipartRequest;
import org.ajax4jsf.webapp.ConfigurableFilter;
/**
@@ -48,202 +32,4 @@
*/
public class Filter extends ConfigurableFilter {
- /** Multipart request start */
- public static final String MULTIPART = "multipart/";
-
- /** Session bean name where multipart requests map will be stored */
- public static final String REQUESTS_SESSIONS_BEAN_NAME =
"_richfaces_upload_sessions";
-
- /** Session bean name where progress bar's percent map will be stored */
- public static final String PERCENT_BEAN_NAME = "_richfaces_upload_percents";
-
- /**
- * Request parameter that indicates if multipart request forced by rich file
- * upload component
- */
- public static final String UPLOAD_FILES_ID = "_richfaces_upload_uid";
-
- /** Session bean name to store max files count allowed to upload */
- public static final String UPLOADED_COUNTER =
"_richfaces_uploaded_file_counter";
-
- /**
- * Flag indicating whether a temporary file should be used to cache the
- * uploaded file
- */
- private boolean createTempFiles = false;
-
- /**
- * The maximum size of a file upload request. 0 means no limit.
- */
- private int maxRequestSize = 0;
-
- /***************************************************************************
- * Method catches upload files request. Request parameter
- * <b>org.ajax4jsf.Filter.UPLOAD_FILES_ID</b> indicates if request
- * generated by rich-upload component. If it was detected custom parsing
- * request should be done. Processing information about percent of
- * completion and file size will be put into session scope. In other case
- * super filter's method will be invoked for request processing.
- *
- * @param request
- * @param response
- * @param chain
- */
- @Override
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException {
- if (!(response instanceof HttpServletResponse)) {
- chain.doFilter(request, response);
- return;
- }
-
- HttpServletRequest httpRequest = (HttpServletRequest) request;
- String uid = httpRequest.getParameter(UPLOAD_FILES_ID);
- if (uid != null) {
- if (isMultipartRequest(httpRequest)) {
- MultipartRequest multipartRequest = new MultipartRequest(
- httpRequest, createTempFiles, maxRequestSize, uid);
-
- Map<String, MultipartRequest> sessionsMap = null;
- Map<String, Object> percentMap = null;
- try {
- if (isFileSizeRestricted(request, maxRequestSize)) {
- printResponse(response,
- "<html
id=\"_richfaces_file_upload_size_restricted\"></html>");
- } else if (!checkFileCount(httpRequest)) {
- printResponse(response,
- "<html
id=\"_richfaces_file_upload_forbidden\"></html>");
- } else {
- HttpSession session = httpRequest.getSession();
- synchronized (session) {
- sessionsMap = (Map<String, MultipartRequest>) session
- .getAttribute(REQUESTS_SESSIONS_BEAN_NAME);
- percentMap = (Map<String, Object>) session
- .getAttribute(PERCENT_BEAN_NAME);
- if (sessionsMap == null) {
- sessionsMap = Collections
- .synchronizedMap(new HashMap<String, MultipartRequest>());
- session.setAttribute(
- REQUESTS_SESSIONS_BEAN_NAME,
- sessionsMap);
- }
- if (percentMap == null) {
- percentMap = new HashMap<String, Object>();
- session.setAttribute(PERCENT_BEAN_NAME,
- percentMap);
- }
- }
- percentMap.put(uid, 0); // associate percent value with
- // file
- // entry uid
- sessionsMap.put(uid, multipartRequest);
-
- if (multipartRequest.parseRequest()) {
- super.doFilter(multipartRequest, response, chain);
- } else {
- printResponse(response,
- "<html
id=\"_richfaces_file_upload_stopped\"></html>");
- }
- }
- } finally {
- if (sessionsMap != null) {
- sessionsMap.remove(uid);
- percentMap.remove(uid);
- }
- }
- } else {
- if ("stop".equals(httpRequest.getParameter("action"))) {
- HttpSession session = httpRequest.getSession();
- Map<String, MultipartRequest> sessions = (Map<String, MultipartRequest>)
session
- .getAttribute(REQUESTS_SESSIONS_BEAN_NAME);
-
- if (sessions != null) {
- MultipartRequest multipartRequest = sessions.get(uid);
- if (multipartRequest != null) {
- multipartRequest.stop();
- HttpServletResponse httpResponse = (HttpServletResponse) response;
- httpResponse
- .setStatus(HttpServletResponse.SC_NO_CONTENT);
- httpResponse.getOutputStream().close();
- }
- }
- } else {
- super.doFilter(request, response, chain);
- }
- }
- } else {
- super.doFilter(request, response, chain);
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.ajax4jsf.webapp.BaseFilter#init(javax.servlet.FilterConfig)
- */
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
- super.init(filterConfig);
- String param = filterConfig.getInitParameter("createTempFiles");
- if (param != null) {
- this.createTempFiles = Boolean.parseBoolean(param);
- } else {
- this.createTempFiles = true;
- }
- param = filterConfig.getInitParameter("maxRequestSize");
- if (param != null) {
- this.maxRequestSize = Integer.parseInt(param);
- }
- }
-
- private boolean isMultipartRequest(HttpServletRequest request) {
- if (!"post".equals(request.getMethod().toLowerCase())) {
- return false;
- }
-
- String contentType = request.getContentType();
- if (contentType == null) {
- return false;
- }
-
- if (contentType.toLowerCase().startsWith(MULTIPART)) {
- return true;
- }
-
- return false;
- }
-
- private boolean isFileSizeRestricted(ServletRequest request, int maxSize) {
- if (maxSize != 0 && request.getContentLength() > maxSize) {
- return true;
- }
- return false;
- }
-
- private boolean checkFileCount(HttpServletRequest request) {
- HttpSession session = request.getSession();
- Map<String, Integer> map = (Map<String, Integer>) session
- .getAttribute(UPLOADED_COUNTER);
- if (map != null) {
- String id = request.getParameter("id");
- if (id != null) {
- Integer i = map.get(id);
- if (i != null && i == 0) {
- return false;
- }
- }
- }
- return true;
- }
-
- private void printResponse(ServletResponse response, String message)
- throws IOException {
- HttpServletResponse httpResponse = (HttpServletResponse) response;
- httpResponse.setStatus(HttpServletResponse.SC_OK);
- httpResponse.setContentType("text/html");
- PrintWriter writer = httpResponse.getWriter();
- writer.write(message);
- writer.close();
- }
-
}
Modified: branches/3.2.x/framework/impl/src/main/java/org/ajax4jsf/webapp/BaseFilter.java
===================================================================
---
branches/3.2.x/framework/impl/src/main/java/org/ajax4jsf/webapp/BaseFilter.java 2008-04-09
18:28:09 UTC (rev 7719)
+++
branches/3.2.x/framework/impl/src/main/java/org/ajax4jsf/webapp/BaseFilter.java 2008-04-09
18:34:05 UTC (rev 7720)
@@ -22,9 +22,13 @@
package org.ajax4jsf.webapp;
import java.io.IOException;
+import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
+import java.util.Collections;
import java.util.Date;
import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
import javax.faces.application.ViewHandler;
import javax.servlet.Filter;
@@ -41,6 +45,7 @@
import org.ajax4jsf.Messages;
import org.ajax4jsf.context.AjaxContext;
import org.ajax4jsf.renderkit.AjaxContainerRenderer;
+import org.ajax4jsf.request.MultipartRequest;
import org.ajax4jsf.resource.InternetResourceService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -108,6 +113,35 @@
protected PollEventsManager eventsManager;
/**
+ * Flag indicating whether a temporary file should be used to cache the
+ * uploaded file
+ */
+ private boolean createTempFiles = false;
+
+ /**
+ * The maximum size of a file upload request. 0 means no limit.
+ */
+ private int maxRequestSize = 0;
+
+ /** Multipart request start */
+ public static final String MULTIPART = "multipart/";
+
+ /** Session bean name where multipart requests map will be stored */
+ public static final String REQUESTS_SESSIONS_BEAN_NAME =
"_richfaces_upload_sessions";
+
+ /** Session bean name where progress bar's percent map will be stored */
+ public static final String PERCENT_BEAN_NAME = "_richfaces_upload_percents";
+
+ /**
+ * Request parameter that indicates if multipart request forced by rich file
+ * upload component
+ */
+ public static final String UPLOAD_FILES_ID = "_richfaces_upload_uid";
+
+ /** Session bean name to store max files count allowed to upload */
+ public static final String UPLOADED_COUNTER =
"_richfaces_uploaded_file_counter";
+
+ /**
* Initialize the filter.
*/
public void init(FilterConfig config) throws ServletException {
@@ -140,9 +174,193 @@
resourceService.init(filterConfig);
eventsManager = new PollEventsManager();
eventsManager.init(filterConfig.getServletContext());
+
+ String param = filterConfig.getInitParameter("createTempFiles");
+ if (param != null) {
+ this.createTempFiles = Boolean.parseBoolean(param);
+ } else {
+ this.createTempFiles = true;
+ }
+ param = filterConfig.getInitParameter("maxRequestSize");
+ if (param != null) {
+ this.maxRequestSize = Integer.parseInt(param);
+ }
}
+ private boolean isMultipartRequest(HttpServletRequest request) {
+ if (!"post".equals(request.getMethod().toLowerCase())) {
+ return false;
+ }
+
+ String contentType = request.getContentType();
+ if (contentType == null) {
+ return false;
+ }
+
+ if (contentType.toLowerCase().startsWith(MULTIPART)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ private boolean isFileSizeRestricted(ServletRequest request, int maxSize) {
+ if (maxSize != 0 && request.getContentLength() > maxSize) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean checkFileCount(HttpServletRequest request) {
+ HttpSession session = request.getSession();
+ Map<String, Integer> map = (Map<String, Integer>) session
+ .getAttribute(UPLOADED_COUNTER);
+ if (map != null) {
+ String id = request.getParameter("id");
+ if (id != null) {
+ Integer i = map.get(id);
+ if (i != null && i == 0) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ private void printResponse(ServletResponse response, String message)
+ throws IOException {
+ HttpServletResponse httpResponse = (HttpServletResponse) response;
+ httpResponse.setStatus(HttpServletResponse.SC_OK);
+ httpResponse.setContentType("text/html");
+ PrintWriter writer = httpResponse.getWriter();
+ writer.write(message);
+ writer.close();
+ }
+
+ protected void handleRequest(HttpServletRequest request, HttpServletResponse response,
+ FilterChain chain) throws IOException, ServletException {
+
+ // check ajax request parameter
+ // TODO - check for JSF page.
+ if (true) {
+ if (log.isDebugEnabled()) {
+ log.debug(Messages
+ .getMessage(Messages.FILTER_XML_OUTPUT));
+ }
+
+ // Execute the rest of the filter chain, including the
+ // JSP
+ xmlFilter.doXmlFilter(chain, request,
+ response);
+ } else {
+ // normal request, execute chain ...
+ if (log.isDebugEnabled()) {
+ log.debug(Messages
+ .getMessage(Messages.FILTER_NO_XML_CHAIN));
+ }
+ chain.doFilter(request, response);
+
+ }
+
+ }
+
/**
+ * Method catches upload files request. Request parameter
+ * <b>org.ajax4jsf.Filter.UPLOAD_FILES_ID</b> indicates if request
+ * generated by rich-upload component. If it was detected custom parsing
+ * request should be done. Processing information about percent of
+ * completion and file size will be put into session scope.
+ *
+ * @param request
+ * @param response
+ * @return
+ * @throws IOException
+ * @throws ServletException
+ */
+ protected void processUploadsAndHandleRequest(HttpServletRequest request,
HttpServletResponse response,
+ FilterChain chain) throws IOException, ServletException {
+ HttpServletRequest httpRequest = (HttpServletRequest) request;
+ String uid = httpRequest.getParameter(UPLOAD_FILES_ID);
+ if (uid != null) {
+ if (isMultipartRequest(httpRequest)) {
+ MultipartRequest multipartRequest = new MultipartRequest(
+ httpRequest, createTempFiles, maxRequestSize, uid);
+
+ Map<String, MultipartRequest> sessionsMap = null;
+ Map<String, Object> percentMap = null;
+ try {
+ if (isFileSizeRestricted(request, maxRequestSize)) {
+ printResponse(response,
+ "<html
id=\"_richfaces_file_upload_size_restricted\"></html>");
+ } else if (!checkFileCount(httpRequest)) {
+ printResponse(response,
+ "<html
id=\"_richfaces_file_upload_forbidden\"></html>");
+ } else {
+ HttpSession session = httpRequest.getSession();
+ synchronized (session) {
+ sessionsMap = (Map<String, MultipartRequest>) session
+ .getAttribute(REQUESTS_SESSIONS_BEAN_NAME);
+ percentMap = (Map<String, Object>) session
+ .getAttribute(PERCENT_BEAN_NAME);
+ if (sessionsMap == null) {
+ sessionsMap = Collections
+ .synchronizedMap(new HashMap<String, MultipartRequest>());
+ session.setAttribute(
+ REQUESTS_SESSIONS_BEAN_NAME,
+ sessionsMap);
+ }
+ if (percentMap == null) {
+ percentMap = new HashMap<String, Object>();
+ session.setAttribute(PERCENT_BEAN_NAME,
+ percentMap);
+ }
+ }
+ percentMap.put(uid, 0); // associate percent value with
+ // file
+ // entry uid
+ sessionsMap.put(uid, multipartRequest);
+
+ if (multipartRequest.parseRequest()) {
+ handleRequest(multipartRequest, response, chain);
+ } else {
+ printResponse(response,
+ "<html
id=\"_richfaces_file_upload_stopped\"></html>");
+ }
+ }
+ } finally {
+ if (sessionsMap != null) {
+ sessionsMap.remove(uid);
+ percentMap.remove(uid);
+ }
+ }
+ } else {
+ if ("stop".equals(httpRequest.getParameter("action"))) {
+ HttpSession session = httpRequest.getSession();
+ Map<String, MultipartRequest> sessions = (Map<String, MultipartRequest>)
session
+ .getAttribute(REQUESTS_SESSIONS_BEAN_NAME);
+
+ if (sessions != null) {
+ MultipartRequest multipartRequest = sessions.get(uid);
+ if (multipartRequest != null) {
+ multipartRequest.stop();
+ HttpServletResponse httpResponse = (HttpServletResponse) response;
+ httpResponse
+ .setStatus(HttpServletResponse.SC_NO_CONTENT);
+ httpResponse.getOutputStream().close();
+ }
+ }
+
+ //TODO what's here?
+ } else {
+ handleRequest(request, response, chain);
+ }
+ }
+ } else {
+ handleRequest(request, response, chain);
+ }
+ }
+
+ /**
* @param httpServletRequest
* @throws UnsupportedEncodingException
*/
@@ -263,29 +481,9 @@
// first stage - detect/set encoding of request. Same as in
// Myfaces External Context.
setupRequestEncoding(httpServletRequest);
- // check ajax request parameter
- // TODO - check for JSF page.
- if (true) {
- if (log.isDebugEnabled()) {
- log.debug(Messages
- .getMessage(Messages.FILTER_XML_OUTPUT));
- }
-
- // Execute the rest of the filter chain, including the
- // JSP
- xmlFilter.doXmlFilter(chain, httpServletRequest,
- httpServletResponse);
- } else {
- // normal request, execute chain ...
- if (log.isDebugEnabled()) {
- log.debug(Messages
- .getMessage(Messages.FILTER_NO_XML_CHAIN));
- }
- chain.doFilter(request, response);
-
- }
+
+ processUploadsAndHandleRequest(httpServletRequest, httpServletResponse, chain);
}
-
} finally {
// Remove filter marker from response, to enable sequence calls ( for example,
forward to error page )
request.removeAttribute(FILTER_PERFORMED);