|  | @@ -8,21 +8,31 @@ import javax.servlet.http.HttpServletResponseWrapper;
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * Base class for response wrappers which encapsulate the logic for storing a security context and which
 | 
	
		
			
				|  |  |   * store the with the <code>SecurityContext</code> when a <code>sendError()</code> or <code>sendRedirect</code>
 | 
	
		
			
				|  |  | - * happens. See SEC-398.
 | 
	
		
			
				|  |  | + * happens. See issue SEC-398.
 | 
	
		
			
				|  |  |   * <p>
 | 
	
		
			
				|  |  |   * Sub-classes should implement the {@link #saveContext(SecurityContext context)} method.
 | 
	
		
			
				|  |  | + * <p>
 | 
	
		
			
				|  |  | + * Support is also provided for disabling URL rewriting
 | 
	
		
			
				|  |  |   *
 | 
	
		
			
				|  |  |   * @author Luke Taylor
 | 
	
		
			
				|  |  |   * @author Marten Algesten
 | 
	
		
			
				|  |  |   * @version $Id$
 | 
	
		
			
				|  |  |   * @since 2.5
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  | -abstract class SaveContextOnUpdateOrErrorResponseWrapper extends HttpServletResponseWrapper {
 | 
	
		
			
				|  |  | +public abstract class SaveContextOnUpdateOrErrorResponseWrapper extends HttpServletResponseWrapper {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    boolean contextSaved = false;
 | 
	
		
			
				|  |  | +    private boolean contextSaved = false;
 | 
	
		
			
				|  |  | +    /* See SEC-1052 */
 | 
	
		
			
				|  |  | +    private boolean disableUrlRewriting;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    SaveContextOnUpdateOrErrorResponseWrapper(HttpServletResponse response) {
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * @param response              the response to be wrapped
 | 
	
		
			
				|  |  | +     * @param disableUrlRewriting   turns the URL encoding methods into null operations, preventing the use
 | 
	
		
			
				|  |  | +     *                              of URL rewriting to add the session identifier as a URL parameter.
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    public SaveContextOnUpdateOrErrorResponseWrapper(HttpServletResponse response, boolean disableUrlRewriting) {
 | 
	
		
			
				|  |  |          super(response);
 | 
	
		
			
				|  |  | +        this.disableUrlRewriting = disableUrlRewriting;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
	
		
			
				|  | @@ -36,7 +46,8 @@ abstract class SaveContextOnUpdateOrErrorResponseWrapper extends HttpServletResp
 | 
	
		
			
				|  |  |       * Makes sure the session is updated before calling the
 | 
	
		
			
				|  |  |       * superclass <code>sendError()</code>
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  | -    public void sendError(int sc) throws IOException {
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public final void sendError(int sc) throws IOException {
 | 
	
		
			
				|  |  |          doSaveContext();
 | 
	
		
			
				|  |  |          super.sendError(sc);
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -45,7 +56,8 @@ abstract class SaveContextOnUpdateOrErrorResponseWrapper extends HttpServletResp
 | 
	
		
			
				|  |  |       * Makes sure the session is updated before calling the
 | 
	
		
			
				|  |  |       * superclass <code>sendError()</code>
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  | -    public void sendError(int sc, String msg) throws IOException {
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public final void sendError(int sc, String msg) throws IOException {
 | 
	
		
			
				|  |  |          doSaveContext();
 | 
	
		
			
				|  |  |          super.sendError(sc, msg);
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -54,7 +66,8 @@ abstract class SaveContextOnUpdateOrErrorResponseWrapper extends HttpServletResp
 | 
	
		
			
				|  |  |       * Makes sure the context is stored before calling the
 | 
	
		
			
				|  |  |       * superclass <code>sendRedirect()</code>
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  | -    public void sendRedirect(String location) throws IOException {
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public final void sendRedirect(String location) throws IOException {
 | 
	
		
			
				|  |  |          doSaveContext();
 | 
	
		
			
				|  |  |          super.sendRedirect(location);
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -67,10 +80,42 @@ abstract class SaveContextOnUpdateOrErrorResponseWrapper extends HttpServletResp
 | 
	
		
			
				|  |  |          contextSaved = true;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public final String encodeRedirectUrl(String url) {
 | 
	
		
			
				|  |  | +        if (disableUrlRewriting) {
 | 
	
		
			
				|  |  | +            return url;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return super.encodeRedirectUrl(url);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public final String encodeRedirectURL(String url) {
 | 
	
		
			
				|  |  | +        if (disableUrlRewriting) {
 | 
	
		
			
				|  |  | +            return url;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return super.encodeRedirectURL(url);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public final String encodeUrl(String url) {
 | 
	
		
			
				|  |  | +        if (disableUrlRewriting) {
 | 
	
		
			
				|  |  | +            return url;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return super.encodeUrl(url);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public final String encodeURL(String url) {
 | 
	
		
			
				|  |  | +        if (disableUrlRewriting) {
 | 
	
		
			
				|  |  | +            return url;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return super.encodeURL(url);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * Tells if the response wrapper has called <code>saveContext()</code> because of an error or redirect.
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  | -    public boolean isContextSaved() {
 | 
	
		
			
				|  |  | +    public final boolean isContextSaved() {
 | 
	
		
			
				|  |  |          return contextSaved;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 |