summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Lenz <thomas.lenz@egiz.gv.at>2019-04-23 15:00:40 +0200
committerThomas Lenz <thomas.lenz@egiz.gv.at>2019-04-23 15:00:40 +0200
commit02851082661a924adc68230615f61a308705ce2b (patch)
treebd09998365191ddb065c3c61a0af60d0ec684bda
parent5c1b5b863fe8d6c08cfe0749fed7ce9594827f8a (diff)
downloadEAAF-Components-02851082661a924adc68230615f61a308705ce2b.tar.gz
EAAF-Components-02851082661a924adc68230615f61a308705ce2b.tar.bz2
EAAF-Components-02851082661a924adc68230615f61a308705ce2b.zip
integrate Spring ModelAndView into EAAF GUI framework
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGUIBuilderConfiguration.java18
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGUIBuilderConfigurationFactory.java2
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGUIFormBuilder.java38
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/ISpringMVCGUIFormBuilder.java5
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IVelocityGUIBuilderConfiguration.java22
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IVelocityGuiFormBuilder.java66
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/exceptions/EAAFIllegalStateException.java5
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/gui/AbstractVelocityGUIFormBuilderImpl.java (renamed from eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/gui/AbstractGUIFormBuilderImpl.java)68
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/ProtocolAuthenticationService.java20
-rw-r--r--eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/binding/PostBinding.java47
-rw-r--r--eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/opensaml/HTTPPostEncoderWithOwnTemplate.java25
11 files changed, 207 insertions, 109 deletions
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGUIBuilderConfiguration.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGUIBuilderConfiguration.java
index 483ea6ef..82d82a3a 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGUIBuilderConfiguration.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGUIBuilderConfiguration.java
@@ -26,7 +26,6 @@
*******************************************************************************/
package at.gv.egiz.eaaf.core.api.gui;
-import java.io.InputStream;
import java.util.Map;
/**
@@ -50,23 +49,6 @@ public interface IGUIBuilderConfiguration {
*/
public Map<String, Object> getViewParameters();
-
- /**
- * Get a specific classpath template-directory prefix, which is used
- * to load a template from classpath by using <code>ClassLoader.getResourceAsStream(...)</code>
- *
- * @return Classpath directory, or null if the default directory should be used
- */
- public String getClasspathTemplateDir();
-
- /**
- * Get the GUI template with a specific name
- *
- * @param viewName Name of the template
- * @return Tempate as <code>InputStream</code>, or null if default getTemplate method should be used
- */
- public InputStream getTemplate(String viewName);
-
/**
* Get the contentType, which should be set in HTTP response
* <br><br>
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGUIBuilderConfigurationFactory.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGUIBuilderConfigurationFactory.java
index a569f507..1776a630 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGUIBuilderConfigurationFactory.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGUIBuilderConfigurationFactory.java
@@ -48,7 +48,7 @@ public interface IGUIBuilderConfigurationFactory {
* @return
* @throws MalformedURLException If configRootContextDir is not a valid URI
*/
- public IGUIBuilderConfiguration getSPSpecificSAML2PostConfiguration(IRequest pendingReq, String viewName, URI configRootContextDir)
+ public IVelocityGUIBuilderConfiguration getSPSpecificSAML2PostConfiguration(IRequest pendingReq, String viewName, URI configRootContextDir)
throws MalformedURLException;
}
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGUIFormBuilder.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGUIFormBuilder.java
index aa7fd99b..7730e516 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGUIFormBuilder.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGUIFormBuilder.java
@@ -26,12 +26,9 @@
*******************************************************************************/
package at.gv.egiz.eaaf.core.api.gui;
-import java.io.InputStream;
-
+import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.apache.velocity.VelocityContext;
-
import at.gv.egiz.eaaf.core.exceptions.GUIBuildException;
/**
@@ -40,55 +37,38 @@ import at.gv.egiz.eaaf.core.exceptions.GUIBuildException;
*/
public interface IGUIFormBuilder {
+
+
/**
* Parse a GUI template, with parameters into a http servlet-response
* and use the default http-response content-type.
* <br><br>
* The parser use the <code>VelocityEngine</code> as internal template evaluator.
*
+ * @param httpReq http-request object
* @param httpResp http-response object
- * @param viewName Name of the template (with suffix), which should be used.
- * The template is selected by using the <code>getTemplate(String viewName)</code> method
- * @param viewParams Map of parameters, which should be added to template
+ * @param config Configuration object
* @param loggerName String, which should be used from logger
*
* @throws GUIBuildException
*/
- public void build(HttpServletResponse httpResp, IGUIBuilderConfiguration config, String loggerName) throws GUIBuildException;
+ public void build(HttpServletRequest httpReq, HttpServletResponse httpResp, IGUIBuilderConfiguration config, String loggerName) throws GUIBuildException;
/**
* Parse a GUI template, with parameters into a http servlet-response.
* <br><br>
* The parser use the <code>VelocityEngine</code> as internal template evaluator.
*
+ * @param httpReq http-request object
* @param httpResp http-response object
- * @param viewName Name of the template (with suffix), which should be used.
- * The template is selected by using the <code>getTemplate(String viewName)</code> method
- * @param viewParams Map of parameters, which should be added to template
+ * @param config Configuration object
* @param contentType http-response content-type, which should be set
* @param loggerName String, which should be used from logger
*
* @throws GUIBuildException
*/
- void build(HttpServletResponse httpResp, IGUIBuilderConfiguration config, String contentType,
+ void build(HttpServletRequest httpReq, HttpServletResponse httpResp, IGUIBuilderConfiguration config, String contentType,
String loggerName) throws GUIBuildException;
-
- /**
- * Generate a new {@link VelocityContext} and populate it with MOA-ID GUI parameters
- *
- * @param config
- * @return
- */
- public VelocityContext generateVelocityContextFromConfiguration(IGUIBuilderConfiguration config);
-
- /**
- * Load the template from different resources
- *
- * @param config
- * @return An {@link InputStream} but never null. The {@link InputStream} had to be closed be the invoking method
- * @throws GUIBuildException
- */
- public InputStream getTemplateInputStream(IGUIBuilderConfiguration config) throws GUIBuildException;
}
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/ISpringMVCGUIFormBuilder.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/ISpringMVCGUIFormBuilder.java
new file mode 100644
index 00000000..e759b253
--- /dev/null
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/ISpringMVCGUIFormBuilder.java
@@ -0,0 +1,5 @@
+package at.gv.egiz.eaaf.core.api.gui;
+
+public interface ISpringMVCGUIFormBuilder extends IGUIFormBuilder{
+
+}
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IVelocityGUIBuilderConfiguration.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IVelocityGUIBuilderConfiguration.java
new file mode 100644
index 00000000..e56bf1af
--- /dev/null
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IVelocityGUIBuilderConfiguration.java
@@ -0,0 +1,22 @@
+package at.gv.egiz.eaaf.core.api.gui;
+
+import java.io.InputStream;
+
+public interface IVelocityGUIBuilderConfiguration extends IGUIBuilderConfiguration {
+ /**
+ * Get a specific classpath template-directory prefix, which is used
+ * to load a template from classpath by using <code>ClassLoader.getResourceAsStream(...)</code>
+ *
+ * @return Classpath directory, or null if the default directory should be used
+ */
+ public String getClasspathTemplateDir();
+
+ /**
+ * Get the GUI template with a specific name
+ *
+ * @param viewName Name of the template
+ * @return Tempate as <code>InputStream</code>, or null if default getTemplate method should be used
+ */
+ public InputStream getTemplate(String viewName);
+
+}
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IVelocityGuiFormBuilder.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IVelocityGuiFormBuilder.java
new file mode 100644
index 00000000..103b38d9
--- /dev/null
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/api/gui/IVelocityGuiFormBuilder.java
@@ -0,0 +1,66 @@
+package at.gv.egiz.eaaf.core.api.gui;
+
+import java.io.InputStream;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.velocity.VelocityContext;
+
+import at.gv.egiz.eaaf.core.exceptions.GUIBuildException;
+
+public interface IVelocityGuiFormBuilder extends IGUIFormBuilder {
+
+
+ /**
+ * Generate a new {@link VelocityContext} and populate it with MOA-ID GUI parameters
+ *
+ * @param config
+ * @return
+ */
+ public VelocityContext generateVelocityContextFromConfiguration(IVelocityGUIBuilderConfiguration config);
+
+
+ /**
+ * Load the template from different resources
+ *
+ * @param config
+ * @return An {@link InputStream} but never null. The {@link InputStream} had to be closed be the invoking method
+ * @throws GUIBuildException
+ */
+ public InputStream getTemplateInputStream(IVelocityGUIBuilderConfiguration config) throws GUIBuildException;
+
+
+ /**
+ * Parse a GUI template, with parameters into a http servlet-response
+ * and use the default http-response content-type.
+ * <br><br>
+ * The parser use the <code>VelocityEngine</code> as internal template evaluator.
+ *
+ * @param httpReq http-request object
+ * @param httpResp http-response object
+ * @param config Configuration object
+ * @param loggerName String, which should be used from logger
+ *
+ * @throws GUIBuildException
+ */
+ void build(HttpServletRequest httpReq, HttpServletResponse httpResp, IVelocityGUIBuilderConfiguration config, String loggerName)
+ throws GUIBuildException;
+
+
+ /**
+ * Parse a GUI template, with parameters into a http servlet-response.
+ * <br><br>
+ * The parser use the <code>VelocityEngine</code> as internal template evaluator.
+ *
+ * @param httpReq http-request object
+ * @param httpResp http-response object
+ * @param config Configuration object
+ * @param contentType http-response content-type, which should be set
+ * @param loggerName String, which should be used from logger
+ *
+ * @throws GUIBuildException
+ */
+ void build(HttpServletRequest httpReq, HttpServletResponse httpResp, IVelocityGUIBuilderConfiguration config, String contentType,
+ String loggerName) throws GUIBuildException;
+}
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/exceptions/EAAFIllegalStateException.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/exceptions/EAAFIllegalStateException.java
index cb08a68d..95688260 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/exceptions/EAAFIllegalStateException.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/exceptions/EAAFIllegalStateException.java
@@ -35,5 +35,10 @@ public class EAAFIllegalStateException extends EAAFException {
super(IStatusMessenger.CODES_INTERNAL_ILLEGAL_STATE, params);
}
+
+ public EAAFIllegalStateException(Object[] params, Throwable e) {
+ super(IStatusMessenger.CODES_INTERNAL_ILLEGAL_STATE, params, e);
+
+ }
}
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/gui/AbstractGUIFormBuilderImpl.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/gui/AbstractVelocityGUIFormBuilderImpl.java
index 7273ccc8..65e13b5a 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/gui/AbstractGUIFormBuilderImpl.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/gui/AbstractVelocityGUIFormBuilderImpl.java
@@ -35,6 +35,7 @@ import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
+import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
@@ -45,7 +46,8 @@ import org.slf4j.LoggerFactory;
import at.gv.egiz.eaaf.core.api.data.EAAFConstants;
import at.gv.egiz.eaaf.core.api.gui.IGUIBuilderConfiguration;
-import at.gv.egiz.eaaf.core.api.gui.IGUIFormBuilder;
+import at.gv.egiz.eaaf.core.api.gui.IVelocityGUIBuilderConfiguration;
+import at.gv.egiz.eaaf.core.api.gui.IVelocityGuiFormBuilder;
import at.gv.egiz.eaaf.core.exceptions.GUIBuildException;
import at.gv.egiz.eaaf.core.impl.gui.velocity.VelocityProvider;
@@ -53,43 +55,65 @@ import at.gv.egiz.eaaf.core.impl.gui.velocity.VelocityProvider;
* @author tlenz
*
*/
-public abstract class AbstractGUIFormBuilderImpl implements IGUIFormBuilder {
- private static final Logger log = LoggerFactory.getLogger(AbstractGUIFormBuilderImpl.class);
+public abstract class AbstractVelocityGUIFormBuilderImpl implements IVelocityGuiFormBuilder {
+ private static final Logger log = LoggerFactory.getLogger(AbstractVelocityGUIFormBuilderImpl.class);
private static final String DEFAULT_CONTENT_TYPE = EAAFConstants.CONTENTTYPE_HTML_UTF8;
private VelocityEngine engine;
- public AbstractGUIFormBuilderImpl() throws GUIBuildException {
+ public AbstractVelocityGUIFormBuilderImpl() throws GUIBuildException {
try {
engine = VelocityProvider.getClassPathVelocityEngine();
- } catch (Exception e) {
+ } catch (final Exception e) {
log.error("Initialization of Velocity-Engine to render GUI components FAILED.", e);
throw new GUIBuildException("Initialization of Velocity-Engine to render GUI components FAILED.", e);
}
}
+
+ @Override
+ public final void build(HttpServletRequest httpReq, HttpServletResponse httpResp, IGUIBuilderConfiguration config,
+ String loggerName) throws GUIBuildException {
+ if (config instanceof IVelocityGUIBuilderConfiguration)
+ build(httpReq, httpResp, config, loggerName);
+ else
+ throw new IllegalStateException(this.getClass().getName() + " needs a " + IVelocityGUIBuilderConfiguration.class.getName());
- public void build(HttpServletResponse httpResp, IGUIBuilderConfiguration config, String loggerName) throws GUIBuildException {
- build(httpResp, config, getInternalContentType(config), loggerName);
}
+
+ @Override
+ public final void build(HttpServletRequest httpReq, HttpServletResponse httpResp, IGUIBuilderConfiguration config,
+ String contentType, String loggerName) throws GUIBuildException {
+ if (config instanceof IVelocityGUIBuilderConfiguration)
+ build(httpReq, httpResp, config, loggerName);
+ else
+ throw new IllegalStateException(this.getClass().getName() + " needs a " + IVelocityGUIBuilderConfiguration.class.getName());
+ }
+
@Override
- public void build(HttpServletResponse httpResp, IGUIBuilderConfiguration config,
+ public void build(HttpServletRequest httpReq, HttpServletResponse httpResp, IVelocityGUIBuilderConfiguration config, String loggerName) throws GUIBuildException {
+ build(httpReq, httpResp, config, getInternalContentType(config), loggerName);
+
+ }
+
+ @Override
+ public void build(HttpServletRequest httpReq, HttpServletResponse httpResp, IVelocityGUIBuilderConfiguration config,
String contentType, String loggerName) throws GUIBuildException {
InputStream is = null;
try {
- String viewName = config.getViewName();
+ final String viewName = config.getViewName();
is = getTemplateInputStream(config);
//build Velocity Context from input paramters
- VelocityContext context = buildContextFromViewParams(config.getViewParameters());
+ final VelocityContext context = buildContextFromViewParams(config.getViewParameters());
//evaluate template
- StringWriter writer = new StringWriter();
+ final StringWriter writer = new StringWriter();
engine.evaluate(context, writer, loggerName, new BufferedReader(new InputStreamReader(is)));
//write template to response
@@ -104,12 +128,12 @@ public abstract class AbstractGUIFormBuilderImpl implements IGUIFormBuilder {
+ ". Contentsize:" + String.valueOf(content.length)
+ " BufferSize:" + httpResp.getBufferSize()
+ " ContentType:" + contentType);
- for (String el : httpResp.getHeaderNames())
+ for (final String el : httpResp.getHeaderNames())
log.trace(" * Headername:" + el + " Value:" + httpResp.getHeader(el));
}
- } catch (IOException e) {
+ } catch (final IOException e) {
log.error("GUI form-builder has an internal error.", e);
throw new GUIBuildException("GUI form-builder has an internal error.", e);
@@ -118,7 +142,7 @@ public abstract class AbstractGUIFormBuilderImpl implements IGUIFormBuilder {
try {
is.close();
- } catch (IOException e) {
+ } catch (final IOException e) {
log.error("Can NOT close GUI-Template InputStream.", e);
}
@@ -132,7 +156,8 @@ public abstract class AbstractGUIFormBuilderImpl implements IGUIFormBuilder {
* @param config
* @return
*/
- public VelocityContext generateVelocityContextFromConfiguration(IGUIBuilderConfiguration config) {
+ @Override
+ public VelocityContext generateVelocityContextFromConfiguration(IVelocityGUIBuilderConfiguration config) {
return buildContextFromViewParams(config.getViewParameters());
}
@@ -144,7 +169,8 @@ public abstract class AbstractGUIFormBuilderImpl implements IGUIFormBuilder {
* @return An {@link InputStream} but never null. The {@link InputStream} had to be closed be the invoking method
* @throws GUIBuildException
*/
- public InputStream getTemplateInputStream(IGUIBuilderConfiguration config) throws GUIBuildException {
+ @Override
+ public InputStream getTemplateInputStream(IVelocityGUIBuilderConfiguration config) throws GUIBuildException {
InputStream is = config.getTemplate(config.getViewName());
if (is == null) {
log.trace("Loading GUI template:" + config.getViewName() + " from default resources ... ");
@@ -167,13 +193,13 @@ public abstract class AbstractGUIFormBuilderImpl implements IGUIFormBuilder {
* @return
* @throws GUIBuildException
*/
- abstract protected InputStream getInternalTemplate(IGUIBuilderConfiguration config) throws GUIBuildException;
+ abstract protected InputStream getInternalTemplate(IVelocityGUIBuilderConfiguration config) throws GUIBuildException;
/**
* @return
*/
- protected String getInternalClasspathTemplateDir(IGUIBuilderConfiguration config, String defaultClassPathDir) {
+ protected String getInternalClasspathTemplateDir(IVelocityGUIBuilderConfiguration config, String defaultClassPathDir) {
String dir = config.getClasspathTemplateDir();
if (dir != null) {
if (!dir.endsWith("/"))
@@ -190,12 +216,12 @@ public abstract class AbstractGUIFormBuilderImpl implements IGUIFormBuilder {
* @return
*/
private VelocityContext buildContextFromViewParams(Map<String, Object> viewParams) {
- VelocityContext context = new VelocityContext();
+ final VelocityContext context = new VelocityContext();
if (viewParams != null) {
- Iterator<Entry<String, Object>> interator = viewParams.entrySet().iterator();
+ final Iterator<Entry<String, Object>> interator = viewParams.entrySet().iterator();
while (interator.hasNext()) {
- Entry<String, Object> el = interator.next();
+ final Entry<String, Object> el = interator.next();
context.put(el.getKey(), el.getValue());
}
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/ProtocolAuthenticationService.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/ProtocolAuthenticationService.java
index 8b0f2620..4edde029 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/ProtocolAuthenticationService.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/ProtocolAuthenticationService.java
@@ -45,7 +45,7 @@ import at.gv.egiz.eaaf.core.api.IStatusMessenger;
import at.gv.egiz.eaaf.core.api.data.EAAFConstants;
import at.gv.egiz.eaaf.core.api.gui.IGUIBuilderConfiguration;
import at.gv.egiz.eaaf.core.api.gui.IGUIBuilderConfigurationFactory;
-import at.gv.egiz.eaaf.core.api.gui.IGUIFormBuilder;
+import at.gv.egiz.eaaf.core.api.gui.ISpringMVCGUIFormBuilder;
import at.gv.egiz.eaaf.core.api.gui.ModifyableGuiBuilderConfiguration;
import at.gv.egiz.eaaf.core.api.idp.IAction;
import at.gv.egiz.eaaf.core.api.idp.IAuthData;
@@ -59,6 +59,7 @@ import at.gv.egiz.eaaf.core.api.idp.slo.SLOInformationInterface;
import at.gv.egiz.eaaf.core.api.logging.IRevisionLogger;
import at.gv.egiz.eaaf.core.api.logging.IStatisticLogger;
import at.gv.egiz.eaaf.core.api.storage.ITransactionStorage;
+import at.gv.egiz.eaaf.core.api.utils.IPendingRequestIdGenerationStrategy;
import at.gv.egiz.eaaf.core.exceptions.AuthnRequestValidatorException;
import at.gv.egiz.eaaf.core.exceptions.EAAFAuthenticationException;
import at.gv.egiz.eaaf.core.exceptions.EAAFException;
@@ -67,6 +68,7 @@ import at.gv.egiz.eaaf.core.exceptions.GUIBuildException;
import at.gv.egiz.eaaf.core.exceptions.InvalidProtocolRequestException;
import at.gv.egiz.eaaf.core.exceptions.ProcessExecutionException;
import at.gv.egiz.eaaf.core.exceptions.ProtocolNotActiveException;
+import at.gv.egiz.eaaf.core.impl.idp.controller.protocols.RequestImpl;
import at.gv.egiz.eaaf.core.impl.utils.HTTPUtils;
@Service
@@ -77,10 +79,11 @@ public class ProtocolAuthenticationService implements IProtocolAuthenticationSer
@Autowired(required=true) private ITransactionStorage transactionStorage;
@Autowired(required=true) private IAuthenticationManager authmanager;
@Autowired(required=true) private IAuthenticationDataBuilder authDataBuilder;
- @Autowired(required=true) private IGUIFormBuilder guiBuilder;
+ @Autowired(required=true) private ISpringMVCGUIFormBuilder guiBuilder;
@Autowired(required=true) private IGUIBuilderConfigurationFactory guiConfigFactory;
@Autowired(required=true) private IStatusMessenger statusMessager;
@Autowired(required=true) private IRequestStorage requestStorage;
+ @Autowired(required=true) IPendingRequestIdGenerationStrategy pendingReqIdGenerationStrategy;
@Autowired(required=false) private ISSOManager ssoManager;
@Autowired private IStatisticLogger statisticLogger;
@@ -92,9 +95,12 @@ public class ProtocolAuthenticationService implements IProtocolAuthenticationSer
@Override
public void performAuthentication(final HttpServletRequest req, final HttpServletResponse resp,
final IRequest pendingReq) throws IOException, EAAFException {
- try {
- if (pendingReq.isNeedAuthentication()) {
+ try {
+ if (pendingReq.isNeedAuthentication()) {
//request needs authentication --> start authentication process ...
+
+ //set pendingRequestId to support asynchrony message-processing
+ ((RequestImpl)pendingReq).setPendingRequestId(pendingReqIdGenerationStrategy.generateExternalPendingRequestId());
//load Parameters from OnlineApplicationConfiguration
final ISPConfiguration oaParam = pendingReq.getServiceProviderConfiguration();
@@ -366,11 +372,11 @@ public class ProtocolAuthenticationService implements IProtocolAuthenticationSer
}
- private void writeHTMLErrorResponse(final HttpServletRequest req, final HttpServletResponse httpResp, final String msg, final String errorCode, final Exception error) throws IOException, EAAFException {
+ private void writeHTMLErrorResponse(final HttpServletRequest httpReq, final HttpServletResponse httpResp, final String msg, final String errorCode, final Exception error) throws IOException, EAAFException {
try {
final IGUIBuilderConfiguration config
- = guiConfigFactory.getDefaultErrorGUI(HTTPUtils.extractAuthURLFromRequest(req));
+ = guiConfigFactory.getDefaultErrorGUI(HTTPUtils.extractAuthURLFromRequest(httpReq));
// HTTPUtils.extractAuthURLFromRequest(req),
// DefaultGUIFormBuilderConfiguration.VIEW_ERRORMESSAGE,
@@ -392,7 +398,7 @@ public class ProtocolAuthenticationService implements IProtocolAuthenticationSer
- guiBuilder.build(httpResp, config, "Error-Message");
+ guiBuilder.build(httpReq, httpResp, config, "Error-Message");
} catch (final GUIBuildException e) {
log.warn("Can not build error-message GUI.", e);
diff --git a/eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/binding/PostBinding.java b/eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/binding/PostBinding.java
index 66417c5a..79578788 100644
--- a/eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/binding/PostBinding.java
+++ b/eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/binding/PostBinding.java
@@ -58,9 +58,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import at.gv.egiz.eaaf.core.api.IRequest;
-import at.gv.egiz.eaaf.core.api.gui.IGUIBuilderConfiguration;
import at.gv.egiz.eaaf.core.api.gui.IGUIBuilderConfigurationFactory;
-import at.gv.egiz.eaaf.core.api.gui.IGUIFormBuilder;
+import at.gv.egiz.eaaf.core.api.gui.IVelocityGUIBuilderConfiguration;
+import at.gv.egiz.eaaf.core.api.gui.IVelocityGuiFormBuilder;
import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
import at.gv.egiz.eaaf.core.impl.gui.velocity.VelocityProvider;
import at.gv.egiz.eaaf.modules.pvp2.PVPConstants;
@@ -80,9 +80,10 @@ public class PostBinding implements IDecoder, IEncoder {
private static final Logger log = LoggerFactory.getLogger(PostBinding.class);
@Autowired(required=true) IConfiguration authConfig;
- @Autowired(required=true) IGUIFormBuilder guiBuilder;
+ @Autowired(required=true) IVelocityGuiFormBuilder guiBuilder;
@Autowired(required=true) IGUIBuilderConfigurationFactory guiConfigFactory;
+ @Override
public void encodeRequest(HttpServletRequest req, HttpServletResponse resp,
RequestAbstractType request, String targetLocation, String relayState, Credential credentials, IRequest pendingReq)
throws MessageEncodingException, SecurityException {
@@ -92,19 +93,19 @@ public class PostBinding implements IDecoder, IEncoder {
EAAFDefaultSAML2Bootstrap.initializeDefaultPVPConfiguration();
//initialize POST binding encoder with template decoration
- IGUIBuilderConfiguration guiConfig = guiConfigFactory.getSPSpecificSAML2PostConfiguration(
+ final IVelocityGUIBuilderConfiguration guiConfig = guiConfigFactory.getSPSpecificSAML2PostConfiguration(
pendingReq,
"pvp_postbinding_template.html",
authConfig.getConfigurationRootDirectory());
- HTTPPostEncoderWithOwnTemplate encoder = new HTTPPostEncoderWithOwnTemplate(guiConfig, guiBuilder,
+ final HTTPPostEncoderWithOwnTemplate encoder = new HTTPPostEncoderWithOwnTemplate(guiConfig, guiBuilder,
VelocityProvider.getClassPathVelocityEngine());
//set OpenSAML2 process parameter into binding context dao
- HttpServletResponseAdapter responseAdapter = new HttpServletResponseAdapter(
+ final HttpServletResponseAdapter responseAdapter = new HttpServletResponseAdapter(
resp, true);
- BasicSAMLMessageContext<SAMLObject, SAMLObject, SAMLObject> context = new BasicSAMLMessageContext<SAMLObject, SAMLObject, SAMLObject>();
- SingleSignOnService service = new SingleSignOnServiceBuilder().buildObject();
+ final BasicSAMLMessageContext<SAMLObject, SAMLObject, SAMLObject> context = new BasicSAMLMessageContext<SAMLObject, SAMLObject, SAMLObject>();
+ final SingleSignOnService service = new SingleSignOnServiceBuilder().buildObject();
service.setBinding("urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST");
service.setLocation(targetLocation);;
@@ -116,13 +117,14 @@ public class PostBinding implements IDecoder, IEncoder {
encoder.encode(context);
- } catch (Exception e) {
+ } catch (final Exception e) {
log.warn("Can not encode SAML2 request", e);
throw new SecurityException(e);
}
}
+ @Override
public void encodeRespone(HttpServletRequest req, HttpServletResponse resp,
StatusResponseType response, String targetLocation, String relayState, Credential credentials, IRequest pendingReq)
throws MessageEncodingException, SecurityException {
@@ -134,18 +136,18 @@ public class PostBinding implements IDecoder, IEncoder {
log.debug("create SAML POSTBinding response");
//initialize POST binding encoder with template decoration
- IGUIBuilderConfiguration guiConfig = guiConfigFactory.getSPSpecificSAML2PostConfiguration(
+ final IVelocityGUIBuilderConfiguration guiConfig = guiConfigFactory.getSPSpecificSAML2PostConfiguration(
pendingReq,
"pvp_postbinding_template.html",
authConfig.getConfigurationRootDirectory());
- HTTPPostEncoderWithOwnTemplate encoder = new HTTPPostEncoderWithOwnTemplate(guiConfig, guiBuilder,
+ final HTTPPostEncoderWithOwnTemplate encoder = new HTTPPostEncoderWithOwnTemplate(guiConfig, guiBuilder,
VelocityProvider.getClassPathVelocityEngine());
//set OpenSAML2 process parameter into binding context dao
- HttpServletResponseAdapter responseAdapter = new HttpServletResponseAdapter(
+ final HttpServletResponseAdapter responseAdapter = new HttpServletResponseAdapter(
resp, true);
- BasicSAMLMessageContext<SAMLObject, SAMLObject, SAMLObject> context = new BasicSAMLMessageContext<SAMLObject, SAMLObject, SAMLObject>();
- SingleSignOnService service = new SingleSignOnServiceBuilder()
+ final BasicSAMLMessageContext<SAMLObject, SAMLObject, SAMLObject> context = new BasicSAMLMessageContext<SAMLObject, SAMLObject, SAMLObject>();
+ final SingleSignOnService service = new SingleSignOnServiceBuilder()
.buildObject();
service.setBinding(SAMLConstants.SAML2_POST_BINDING_URI);
service.setLocation(targetLocation);
@@ -158,19 +160,20 @@ public class PostBinding implements IDecoder, IEncoder {
encoder.encode(context);
- } catch (Exception e) {
+ } catch (final Exception e) {
log.warn("Can not encode SAML2 response", e);
throw new SecurityException(e);
}
}
+ @Override
public InboundMessageInterface decode(HttpServletRequest req,
HttpServletResponse resp, MetadataProvider metadataProvider, boolean isSPEndPoint, URIComparator comparator) throws MessageDecodingException,
SecurityException {
- HTTPPostDecoder decode = new HTTPPostDecoder(new BasicParserPool());
- BasicSAMLMessageContext<SAMLObject, ?, ?> messageContext = new BasicSAMLMessageContext<SAMLObject, SAMLObject, SAMLObject>();
+ final HTTPPostDecoder decode = new HTTPPostDecoder(new BasicParserPool());
+ final BasicSAMLMessageContext<SAMLObject, ?, ?> messageContext = new BasicSAMLMessageContext<SAMLObject, SAMLObject, SAMLObject>();
messageContext
.setInboundMessageTransport(new HttpServletRequestAdapter(req));
//set metadata descriptor type
@@ -186,25 +189,25 @@ public class PostBinding implements IDecoder, IEncoder {
messageContext.setMetadataProvider(metadataProvider);
//set security policy context
- BasicSecurityPolicy policy = new BasicSecurityPolicy();
+ final BasicSecurityPolicy policy = new BasicSecurityPolicy();
policy.getPolicyRules().add(
new PVPSignedRequestPolicyRule(metadataProvider,
TrustEngineFactory.getSignatureKnownKeysTrustEngine(metadataProvider),
messageContext.getPeerEntityRole()));
- SecurityPolicyResolver secResolver = new StaticSecurityPolicyResolver(policy);
+ final SecurityPolicyResolver secResolver = new StaticSecurityPolicyResolver(policy);
messageContext.setSecurityPolicyResolver(secResolver);
decode.decode(messageContext);
InboundMessage msg = null;
if (messageContext.getInboundMessage() instanceof RequestAbstractType) {
- RequestAbstractType inboundMessage = (RequestAbstractType) messageContext
+ final RequestAbstractType inboundMessage = (RequestAbstractType) messageContext
.getInboundMessage();
msg = new PVPSProfileRequest(inboundMessage, getSAML2BindingName());
msg.setEntityID(inboundMessage.getIssuer().getValue());
} else if (messageContext.getInboundMessage() instanceof StatusResponseType){
- StatusResponseType inboundMessage = (StatusResponseType) messageContext.getInboundMessage();
+ final StatusResponseType inboundMessage = (StatusResponseType) messageContext.getInboundMessage();
msg = new PVPSProfileResponse(inboundMessage);
msg.setEntityID(inboundMessage.getIssuer().getValue());
@@ -227,10 +230,12 @@ public class PostBinding implements IDecoder, IEncoder {
return msg;
}
+ @Override
public boolean handleDecode(String action, HttpServletRequest req) {
return (req.getMethod().equals("POST") && action.equals(PVPConstants.POST));
}
+ @Override
public String getSAML2BindingName() {
return SAMLConstants.SAML2_POST_BINDING_URI;
}
diff --git a/eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/opensaml/HTTPPostEncoderWithOwnTemplate.java b/eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/opensaml/HTTPPostEncoderWithOwnTemplate.java
index e9a8b320..8af12acc 100644
--- a/eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/opensaml/HTTPPostEncoderWithOwnTemplate.java
+++ b/eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/opensaml/HTTPPostEncoderWithOwnTemplate.java
@@ -43,8 +43,8 @@ import org.opensaml.ws.transport.http.HTTPTransportUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import at.gv.egiz.eaaf.core.api.gui.IGUIBuilderConfiguration;
-import at.gv.egiz.eaaf.core.api.gui.IGUIFormBuilder;
+import at.gv.egiz.eaaf.core.api.gui.IVelocityGUIBuilderConfiguration;
+import at.gv.egiz.eaaf.core.api.gui.IVelocityGuiFormBuilder;
/**
* @author tlenz
@@ -54,15 +54,15 @@ public class HTTPPostEncoderWithOwnTemplate extends HTTPPostEncoder {
private static final Logger log = LoggerFactory.getLogger(HTTPPostEncoderWithOwnTemplate.class);
- private VelocityEngine velocityEngine;
- private IGUIBuilderConfiguration guiConfig;
- private IGUIFormBuilder guiBuilder;
+ private final VelocityEngine velocityEngine;
+ private final IVelocityGUIBuilderConfiguration guiConfig;
+ private final IVelocityGuiFormBuilder guiBuilder;
/**
* @param engine
* @param templateId
*/
- public HTTPPostEncoderWithOwnTemplate(IGUIBuilderConfiguration guiConfig, IGUIFormBuilder guiBuilder, VelocityEngine engine) {
+ public HTTPPostEncoderWithOwnTemplate(IVelocityGUIBuilderConfiguration guiConfig, IVelocityGuiFormBuilder guiBuilder, VelocityEngine engine) {
super(engine, null);
this.velocityEngine = engine;
this.guiConfig = guiConfig;
@@ -78,12 +78,13 @@ public class HTTPPostEncoderWithOwnTemplate extends HTTPPostEncoder {
*
* @throws MessageEncodingException thrown if there is a problem encoding the message
*/
- protected void postEncode(SAMLMessageContext messageContext, String endpointURL) throws MessageEncodingException {
+ @Override
+ protected void postEncode(SAMLMessageContext messageContext, String endpointURL) throws MessageEncodingException {
log.debug("Invoking Velocity template to create POST body");
InputStream is = null;
try {
//build Velocity Context from GUI input paramters
- VelocityContext context = guiBuilder.generateVelocityContextFromConfiguration(guiConfig);
+ final VelocityContext context = guiBuilder.generateVelocityContextFromConfiguration(guiConfig);
//load template
is = guiBuilder.getTemplateInputStream(guiConfig);
@@ -92,17 +93,17 @@ public class HTTPPostEncoderWithOwnTemplate extends HTTPPostEncoder {
populateVelocityContext(context, messageContext, endpointURL);
//populate transport parameter
- HTTPOutTransport outTransport = (HTTPOutTransport) messageContext.getOutboundMessageTransport();
+ final HTTPOutTransport outTransport = (HTTPOutTransport) messageContext.getOutboundMessageTransport();
HTTPTransportUtils.addNoCacheHeaders(outTransport);
HTTPTransportUtils.setUTF8Encoding(outTransport);
HTTPTransportUtils.setContentType(outTransport, "text/html");
//evaluate template and write content to response
- Writer out = new OutputStreamWriter(outTransport.getOutgoingStream(), "UTF-8");
+ final Writer out = new OutputStreamWriter(outTransport.getOutgoingStream(), "UTF-8");
velocityEngine.evaluate(context, out, "SAML2_POST_BINDING", new BufferedReader(new InputStreamReader(is)));
out.flush();
- } catch (Exception e) {
+ } catch (final Exception e) {
log.error("Error invoking Velocity template", e);
throw new MessageEncodingException("Error creating output document", e);
@@ -111,7 +112,7 @@ public class HTTPPostEncoderWithOwnTemplate extends HTTPPostEncoder {
try {
is.close();
- } catch (IOException e) {
+ } catch (final IOException e) {
log.error("Can NOT close GUI-Template InputStream.", e);
}
}