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