Skip to content

Commit

Permalink
removed hardcore refs to http request and response
Browse files Browse the repository at this point in the history
  • Loading branch information
mmoayyed committed Sep 7, 2015
1 parent cb953be commit a151a8e
Show file tree
Hide file tree
Showing 12 changed files with 47 additions and 62 deletions.
Expand Up @@ -98,6 +98,11 @@ public void invalidateSession() {
this.request.getSession().invalidate();
}

@Override
public Object getSessionIdentifier() {
return this.request.getSession().getId();
}

/**
* {@inheritDoc}
*/
Expand Down
Expand Up @@ -85,6 +85,12 @@ public interface WebContext {
*/
void invalidateSession();

/**
* Gets the session id for this context.
* @return the session identifier
*/
Object getSessionIdentifier();

/**
* Return the request method.
*
Expand Down
Expand Up @@ -149,6 +149,11 @@ public Object getSessionAttribute(final String name) {

public void invalidateSession() { this.session.clear(); }

@Override
public Object getSessionIdentifier() {
return hashCode();
}

public String getRequestMethod() {
return this.method;
}
Expand Down
Expand Up @@ -56,7 +56,6 @@
import org.pac4j.saml.sso.impl.SAML2WebSSOMessageReceiver;
import org.pac4j.saml.sso.impl.SAML2WebSSOMessageSender;
import org.pac4j.saml.sso.impl.SAML2WebSSOProfileHandler;
import org.pac4j.saml.transport.SimpleResponseAdapter;
import org.pac4j.saml.util.Configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down
Expand Up @@ -31,7 +31,6 @@
import org.opensaml.saml.saml2.metadata.IDPSSODescriptor;
import org.opensaml.saml.saml2.metadata.RoleDescriptor;
import org.opensaml.saml.saml2.metadata.SPSSODescriptor;
import org.pac4j.core.context.J2EContext;
import org.pac4j.core.context.WebContext;
import org.pac4j.saml.exceptions.SAMLException;
import org.pac4j.saml.metadata.SAML2MetadataResolver;
Expand Down Expand Up @@ -101,12 +100,11 @@ public SAML2MessageContext buildContext(final WebContext webContext) {

protected final void addTransportContext(final WebContext webContext, final SAML2MessageContext context) {

final J2EContext j2EContext = (J2EContext) webContext;
final SimpleRequestAdapter inTransport = new SimpleRequestAdapter(j2EContext);
final SimpleRequestAdapter inTransport = new SimpleRequestAdapter(webContext);
final MessageContext<SimpleRequestAdapter> inCtx = new MessageContext<SimpleRequestAdapter>();
inCtx.setMessage(inTransport);

final SimpleResponseAdapter outTransport = new SimpleResponseAdapter(j2EContext);
final SimpleResponseAdapter outTransport = new SimpleResponseAdapter(webContext);
final MessageContext<SimpleResponseAdapter> outCtx = new MessageContext<SimpleResponseAdapter>();
outCtx.setMessage(outTransport);

Expand All @@ -120,7 +118,7 @@ protected final void addTransportContext(final WebContext webContext, final SAML

if (this.samlMessageStorageFactory != null) {
logger.debug("Creating message storage by {}", this.samlMessageStorageFactory.getClass().getName());
context.setSAMLMessageStorage(this.samlMessageStorageFactory.getMessageStorage(inTransport.getRequest()));
context.setSAMLMessageStorage(this.samlMessageStorageFactory.getMessageStorage(inTransport.getContext()));
}
}

Expand Down
Expand Up @@ -37,8 +37,6 @@
import org.opensaml.xmlsec.context.SecurityParametersContext;
import org.pac4j.saml.exceptions.SAMLException;
import org.pac4j.saml.storage.SAMLMessageStorage;
import org.pac4j.saml.transport.SimpleRequestAdapter;
import org.pac4j.saml.transport.SimpleResponseAdapter;

import java.util.ArrayList;
import java.util.List;
Expand Down
Expand Up @@ -15,14 +15,14 @@
*/
package org.pac4j.saml.storage;

import javax.servlet.http.HttpServletRequest;
import org.pac4j.core.context.WebContext;

/**
* Storage factory which doesn't return any storage implementation and disables the message storage mechanism.
*/
public class EmptyStorageFactory implements SAMLMessageStorageFactory {

public SAMLMessageStorage getMessageStorage(final HttpServletRequest request) {
public SAMLMessageStorage getMessageStorage(final WebContext request) {
return null;
}

Expand Down
Expand Up @@ -16,12 +16,11 @@
package org.pac4j.saml.storage;

import org.opensaml.core.xml.XMLObject;
import org.pac4j.core.context.WebContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.Assert;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Collections;
import java.util.Hashtable;
import java.util.Set;
Expand All @@ -46,7 +45,7 @@ public class HttpSessionStorage implements SAMLMessageStorage {
/**
* Session the storage operates on.
*/
private final HttpSession session;
private final WebContext session;

/**
* Internal storage for messages, corresponding to the object in session.
Expand All @@ -66,21 +65,11 @@ public class HttpSessionStorage implements SAMLMessageStorage {
*
* @param request request to load/store internalMessages from
*/
public HttpSessionStorage(final HttpServletRequest request) {
public HttpSessionStorage(final WebContext request) {
Assert.notNull(request, "Request must be set");
this.session = request.getSession(true);
this.session = request;
}

/**
* Creates the storage object. The session is manipulated only once caller tries to store
* or retrieve a message.
*
* @param session session to load/store internalMessages from
*/
public HttpSessionStorage(final HttpSession session) {
Assert.notNull(session, "Session must be set");
this.session = session;
}

/**
* Stores a request message into the repository. RequestAbstractType must have an ID
Expand All @@ -91,7 +80,7 @@ public HttpSessionStorage(final HttpSession session) {
*/
@Override
public void storeMessage(final String messageID, final XMLObject message) {
log.debug("Storing message {} to session {}", messageID, session.getId());
log.debug("Storing message {} to session {}", messageID, session.getSessionIdentifier());
final Hashtable<String, XMLObject> messages = getMessages();
messages.put(messageID, message);
updateSession(messages);
Expand All @@ -116,11 +105,11 @@ public XMLObject retrieveMessage(final String messageID) {
final Hashtable<String, XMLObject> messages = getMessages();
final XMLObject o = messages.get(messageID);
if (o == null) {
log.debug("Message {} not found in session {}", messageID, session.getId());
log.debug("Message {} not found in session {}", messageID, session.getSessionIdentifier());
return null;
}

log.debug("Message {} found in session {}, clearing", messageID, session.getId());
log.debug("Message {} found in session {}, clearing", messageID, session.getSessionIdentifier());
messages.clear();
updateSession(messages);
return o;
Expand Down Expand Up @@ -156,10 +145,11 @@ private Hashtable<String, XMLObject> getMessages() {
*/
@SuppressWarnings("unchecked")
private Hashtable<String, XMLObject> initializeSession() {
Hashtable<String, XMLObject> messages = (Hashtable<String, XMLObject>) session.getAttribute(SAML_STORAGE_KEY);
Hashtable<String, XMLObject> messages = (Hashtable<String, XMLObject>)
session.getSessionAttribute(SAML_STORAGE_KEY);
if (messages == null) {
synchronized (session) {
messages = (Hashtable<String, XMLObject>) session.getAttribute(SAML_STORAGE_KEY);
messages = (Hashtable<String, XMLObject>) session.getSessionAttribute(SAML_STORAGE_KEY);
if (messages == null) {
messages = new Hashtable<String, XMLObject>();
updateSession(messages);
Expand All @@ -174,7 +164,7 @@ private Hashtable<String, XMLObject> initializeSession() {
* in order to replicate the session across nodes or persist it correctly.
*/
private void updateSession(final Hashtable<String, XMLObject> messages) {
session.setAttribute(SAML_STORAGE_KEY, messages);
session.setSessionAttribute(SAML_STORAGE_KEY, messages);
}

}
Expand Up @@ -15,14 +15,14 @@
*/
package org.pac4j.saml.storage;

import javax.servlet.http.HttpServletRequest;
import org.pac4j.core.context.WebContext;

/**
* Default storage factory which provides HTTP Session storage.
*/
public class HttpSessionStorageFactory implements SAMLMessageStorageFactory {

public SAMLMessageStorage getMessageStorage(final HttpServletRequest request) {
public SAMLMessageStorage getMessageStorage(final WebContext request) {
return new HttpSessionStorage(request);
}

Expand Down
Expand Up @@ -15,7 +15,7 @@
*/
package org.pac4j.saml.storage;

import javax.servlet.http.HttpServletRequest;
import org.pac4j.core.context.WebContext;

/**
* Factories implementing this interface provide services for storage and retrieval of SAML messages for
Expand All @@ -26,9 +26,9 @@ public interface SAMLMessageStorageFactory {
/**
* Provides message storage related to the given request.
*
* @param request currently processed HTTP request
* @param request currently processed context
* @return storage objects
*/
SAMLMessageStorage getMessageStorage(HttpServletRequest request);
SAMLMessageStorage getMessageStorage(WebContext request);

}
Expand Up @@ -16,12 +16,8 @@

package org.pac4j.saml.transport;

import org.pac4j.core.context.J2EContext;
import org.pac4j.core.context.WebContext;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

/**
* Basic RequestAdapter returning an inputStream from the input content of
* the {@link WebContext}.
Expand All @@ -31,27 +27,17 @@
* @since 1.5.0
*
*/
public class SimpleRequestAdapter extends HttpServletRequestWrapper {
private J2EContext context;

public SimpleRequestAdapter(final J2EContext request) {
super(request.getRequest());
}
public class SimpleRequestAdapter {
private final WebContext context;

@Override
public final HttpServletRequest getRequest() {
return (HttpServletRequest) super.getRequest();
public SimpleRequestAdapter(final WebContext request) {
this.context = request;
}

public final J2EContext getContext() {
public final WebContext getContext() {
return context;
}

public void setContext(final J2EContext context) {
this.context = context;
}

@Override
public final String getMethod() {
return getContext().getRequestMethod();
}
Expand Down
Expand Up @@ -16,10 +16,9 @@

package org.pac4j.saml.transport;

import org.pac4j.core.context.J2EContext;
import org.pac4j.core.context.WebContext;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

Expand All @@ -33,8 +32,9 @@
* @since 1.5.0
*
*/
public class SimpleResponseAdapter extends HttpServletResponseWrapper {
public class SimpleResponseAdapter {
private final Pac4jServletOutputStream outputStream = new Pac4jServletOutputStream();
private final WebContext webContext;
private String redirectUrl;

/**
Expand All @@ -43,20 +43,18 @@ public class SimpleResponseAdapter extends HttpServletResponseWrapper {
* @param response the response
* @throws IllegalArgumentException if the response is null
*/
public SimpleResponseAdapter(final J2EContext response) {
super(response.getResponse());
public SimpleResponseAdapter(final WebContext response) {
webContext = response;
}

public final String getOutgoingContent() {
return outputStream.getOutgoingContent();
}

@Override
public final ServletOutputStream getOutputStream() throws IOException {
return outputStream;
}

@Override
public final void sendRedirect(final String redirectUrl) {
this.redirectUrl = redirectUrl;
}
Expand Down

0 comments on commit a151a8e

Please sign in to comment.