Skip to content

Commit

Permalink
Make RequestData serializable
Browse files Browse the repository at this point in the history
Signed-off-by: Guillermo González de Agüero <z06.guillermo@gmail.com>
  • Loading branch information
ggam committed Feb 2, 2019
1 parent 0156152 commit fd9a29c
Show file tree
Hide file tree
Showing 5 changed files with 503 additions and 141 deletions.
7 changes: 7 additions & 0 deletions impl/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
<lifecycle-mapping.version>1.0.0</lifecycle-mapping.version>
<spec-version-maven-plugin.version>1.2</spec-version-maven-plugin.version>
<junit.version>4.12</junit.version>
<servlet.version>3.1.0</servlet.version>
</properties>

<dependencies>
Expand All @@ -50,6 +51,12 @@
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>test</scope> <!-- Needed to implement and instantiate HttpServletRequest -->
</dependency>
</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
import static org.glassfish.soteria.Utils.notNull;
import static org.glassfish.soteria.Utils.validateRequestMethod;
import static org.glassfish.soteria.cdi.CdiUtils.getAnnotation;
import static org.glassfish.soteria.servlet.RequestCopier.copy;

import java.io.Serializable;
import java.lang.annotation.Annotation;
Expand Down Expand Up @@ -349,7 +348,7 @@ private void removeCallerInitiatedAuthentication(HttpServletRequest request) {
}

private void saveRequest(HttpServletRequest request) {
request.getSession().setAttribute(ORIGINAL_REQUEST_DATA_SESSION_NAME, copy(request));
request.getSession().setAttribute(ORIGINAL_REQUEST_DATA_SESSION_NAME, RequestData.of(request));
}

private RequestData getSavedRequest(HttpServletRequest request) {
Expand Down
103 changes: 0 additions & 103 deletions impl/src/main/java/org/glassfish/soteria/servlet/RequestCopier.java

This file was deleted.

102 changes: 66 additions & 36 deletions impl/src/main/java/org/glassfish/soteria/servlet/RequestData.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,29 @@

package org.glassfish.soteria.servlet;

import java.io.Serializable;
import static java.util.Arrays.copyOf;
import static java.util.Collections.emptyMap;
import static java.util.Collections.list;
import static org.glassfish.soteria.Utils.isEmpty;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;


/**
* This class stores the core data that makes up an {@link HttpServletRequest}.
*
* @author Arjan Tijms
*
*/
public class RequestData {
public class RequestData implements Serializable {

private Cookie[] cookies;
private Map<String, List<String>> headers;
Expand All @@ -42,72 +49,96 @@ public class RequestData {
private String requestURL;
private String queryString;

private boolean restoreRequest = true;
public static RequestData of(HttpServletRequest request) {

RequestData requestData = new RequestData();

requestData.cookies = copyCookies(request.getCookies());
requestData.headers = copyHeaders(request);
requestData.parameters = copyParameters(request.getParameterMap());
requestData.locales = list(request.getLocales());

requestData.method = request.getMethod();
requestData.requestURL = request.getRequestURL().toString();
requestData.queryString = request.getQueryString();

return requestData;
}


private static Cookie[] copyCookies(Cookie[] cookies) {

if (isEmpty(cookies)) {
return cookies;
}

List<Cookie> copiedCookies = new ArrayList<>();
for (Cookie cookie : cookies) {
copiedCookies.add((Cookie)cookie.clone());
}

return copiedCookies.toArray(new Cookie[copiedCookies.size()]);
}

private static Map<String, List<String>> copyHeaders(HttpServletRequest request) {

Map<String, List<String>> copiedHeaders = new HashMap<>();
for (String headerName : list(request.getHeaderNames())) {
copiedHeaders.put(headerName, list(request.getHeaders(headerName)));
}

return copiedHeaders;
}

private static Map<String, String[]> copyParameters(Map<String, String[]> parameters) {

if (isEmptyMap(parameters)) {
return emptyMap();
}

Map<String, String[]> copiedParameters = new HashMap<>();
for (Map.Entry<String, String[]> parameter : parameters.entrySet()) {
copiedParameters.put(parameter.getKey(), copyOf(parameter.getValue(), parameter.getValue().length));
}

return copiedParameters;
}

private static boolean isEmptyMap(Map<?, ?> map) {
return map == null || map.isEmpty();
}

public Cookie[] getCookies() {
return cookies;
}

public void setCookies(Cookie[] cookies) {
this.cookies = cookies;
}

public Map<String, List<String>> getHeaders() {
return headers;
}

public void setHeaders(Map<String, List<String>> headers) {
this.headers = headers;
}

public List<Locale> getLocales() {
return locales;
}

public void setLocales(List<Locale> locales) {
this.locales = locales;
}

public Map<String, String[]> getParameters() {
return parameters;
}

public void setParameters(Map<String, String[]> parameters) {
this.parameters = parameters;
}

public String getMethod() {
return method;
}

public void setMethod(String method) {
this.method = method;
}

public String getQueryString() {
return queryString;
}

public void setQueryString(String queryString) {
this.queryString = queryString;
}

public String getRequestURL() {
return requestURL;
}

public void setRequestURL(String requestURL) {
this.requestURL = requestURL;
}

public boolean isRestoreRequest() {
return restoreRequest;
}

public void setRestoreRequest(boolean restoreRequest) {
this.restoreRequest = restoreRequest;
}

public String getFullRequestURL() {
return buildFullRequestURL(requestURL, queryString);
}
Expand All @@ -125,5 +156,4 @@ public String toString() {
private String buildFullRequestURL(String requestURL, String queryString) {
return requestURL + (isEmpty(queryString) ? "" : "?" + queryString);
}

}
Loading

0 comments on commit fd9a29c

Please sign in to comment.