aboutsummaryrefslogtreecommitdiff
path: root/pdf-as-web
diff options
context:
space:
mode:
authorAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2014-05-06 12:20:08 +0200
committerAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2014-05-06 12:20:08 +0200
commit53d5b439a422c72e6f94a2fb1012c85732e33bfe (patch)
tree2475dae53178df8a68609ee9bbfb486af4b49d5e /pdf-as-web
parentc0c25045fafa139a9e6337fd732945ee9cd6318a (diff)
downloadpdf-as-4-53d5b439a422c72e6f94a2fb1012c85732e33bfe.tar.gz
pdf-as-4-53d5b439a422c72e6f94a2fb1012c85732e33bfe.tar.bz2
pdf-as-4-53d5b439a422c72e6f94a2fb1012c85732e33bfe.zip
PDF-AS 4 RC24.0.0-RC2
Diffstat (limited to 'pdf-as-web')
-rw-r--r--pdf-as-web/build.gradle5
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/helper/PdfAsHelper.java75
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/DataURLServlet.java6
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSignParameters.java43
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigning.java11
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigningImpl.java34
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/package-info.java8
-rw-r--r--pdf-as-web/src/main/webapp/WEB-INF/sun-jaxws.xml7
-rw-r--r--pdf-as-web/src/main/webapp/WEB-INF/web.xml13
9 files changed, 189 insertions, 13 deletions
diff --git a/pdf-as-web/build.gradle b/pdf-as-web/build.gradle
index 42925721..d85fec38 100644
--- a/pdf-as-web/build.gradle
+++ b/pdf-as-web/build.gradle
@@ -19,13 +19,16 @@ repositories {
dependencies {
compile project (':pdf-as-lib')
- compile project (':stamper:stmp-itext')
compile project (':signature-standards:sigs-pkcs7detached')
compile project (':signature-standards:sigs-pades')
compile group: 'commons-fileupload', name: 'commons-fileupload', version: '1.2'
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
compile group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.7.5'
compile group: 'opensymphony', name: 'sitemesh', version: '2.4.2'
+ compile 'javax.xml.ws:jaxws-api:2.2.11'
+ compile 'com.sun.xml.ws:jaxws-rt:2.2.8'
+ compile 'com.sun.xml.bind:jaxb-impl:2.2.7'
+ compile group: 'org.apache.pdfbox', name: 'pdfbox', version: '1.8.4'
providedCompile "javax.servlet:servlet-api:2.5"
testCompile group: 'junit', name: 'junit', version: '4.+'
}
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/helper/PdfAsHelper.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/helper/PdfAsHelper.java
index f9d3e720..75c98610 100644
--- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/helper/PdfAsHelper.java
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/helper/PdfAsHelper.java
@@ -57,14 +57,17 @@ import at.gv.egiz.pdfas.sigs.pades.PAdESSigner;
import at.gv.egiz.pdfas.sigs.pkcs7detached.PKCS7DetachedSigner;
import at.gv.egiz.pdfas.web.config.WebConfiguration;
import at.gv.egiz.pdfas.web.exception.PdfAsWebException;
-import at.gv.egiz.sl.CreateCMSSignatureRequestType;
-import at.gv.egiz.sl.CreateCMSSignatureResponseType;
-import at.gv.egiz.sl.InfoboxAssocArrayPairType;
-import at.gv.egiz.sl.InfoboxReadRequestType;
-import at.gv.egiz.sl.InfoboxReadResponseType;
-import at.gv.egiz.sl.ObjectFactory;
+import at.gv.egiz.pdfas.web.ws.PDFASSignParameters;
+import at.gv.egiz.pdfas.web.ws.PDFASSignParameters.Connector;
+import at.gv.egiz.sl.schema.CreateCMSSignatureRequestType;
+import at.gv.egiz.sl.schema.CreateCMSSignatureResponseType;
+import at.gv.egiz.sl.schema.InfoboxAssocArrayPairType;
+import at.gv.egiz.sl.schema.InfoboxReadRequestType;
+import at.gv.egiz.sl.schema.InfoboxReadResponseType;
+import at.gv.egiz.sl.schema.ObjectFactory;
import at.gv.egiz.sl.util.BKUSLConnector;
import at.gv.egiz.sl.util.MOAConnector;
+import at.gv.egiz.sl.util.RequestPackage;
import at.gv.egiz.sl.util.SLMarschaller;
public class PdfAsHelper {
@@ -295,13 +298,15 @@ public class PdfAsHelper {
IPlainSigner signer;
if (connector.equals("moa")) {
signer = new PAdESSigner(new MOAConnector(config));
- } else {
+ } else if(connector.equals("jks")) {
signer = new PKCS7DetachedSigner(
WebConfiguration.getKeystoreFile(),
WebConfiguration.getKeystoreAlias(),
WebConfiguration.getKeystorePass(),
WebConfiguration.getKeystoreKeyPass(),
WebConfiguration.getKeystoreType());
+ } else {
+ throw new PdfAsWebException("Invalid connector (moa | jks)");
}
signParameter.setPlainSigner(signer);
@@ -321,6 +326,57 @@ public class PdfAsHelper {
return output.getData();
}
+ /**
+ * Create synchronous PDF Signature
+ *
+ * @param request
+ * The Web request
+ * @param response
+ * The Web response
+ * @param pdfData
+ * The pdf data
+ * @return The signed pdf data
+ * @throws Exception
+ */
+ public static byte[] synchornousServerSignature(byte[] pdfData, PDFASSignParameters params) throws Exception {
+ Configuration config = pdfAs.getConfiguration();
+
+ // Generate Sign Parameter
+ SignParameter signParameter = PdfAsFactory.createSignParameter(config,
+ new ByteArrayDataSource(pdfData));
+
+ // Get Connector
+
+ IPlainSigner signer;
+ if (params.getConnector().equals(Connector.MOA)) {
+ signer = new PAdESSigner(new MOAConnector(config));
+ } else if(params.getConnector().equals(Connector.JKS)) {
+ signer = new PKCS7DetachedSigner(
+ WebConfiguration.getKeystoreFile(),
+ WebConfiguration.getKeystoreAlias(),
+ WebConfiguration.getKeystorePass(),
+ WebConfiguration.getKeystoreKeyPass(),
+ WebConfiguration.getKeystoreType());
+ } else {
+ throw new PdfAsWebException("Invalid connector (moa | jks)");
+ }
+
+ signParameter.setPlainSigner(signer);
+
+ // set Signature Profile (null use default ...)
+ signParameter.setSignatureProfileId(params.getProfile());
+
+ ByteArrayDataSink output = new ByteArrayDataSink();
+ signParameter.setOutput(output);
+
+ // set Signature Position
+ signParameter.setSignaturePosition(params.getPosition());
+
+ pdfAs.sign(signParameter);
+
+ return output.getData();
+ }
+
public static void startSignature(HttpServletRequest request,
HttpServletResponse response, ServletContext context, byte[] pdfData)
throws Exception {
@@ -354,6 +410,7 @@ public class PdfAsHelper {
if (connector.equals("bku") || connector.equals("onlinebku")
|| connector.equals("mobilebku")) {
BKUSLConnector conn = new BKUSLConnector(config);
+ //conn.setBase64(true);
signer = new PAdESSigner(conn);
session.setAttribute(PDF_SL_CONNECTOR, conn);
} else {
@@ -495,13 +552,13 @@ public class PdfAsHelper {
} else if (statusRequest.needSignature()) {
logger.info("Needing Signature from BKU");
// build SL Request for cms signature
- CreateCMSSignatureRequestType createCMSSignatureRequestType = bkuSLConnector
+ RequestPackage pack = bkuSLConnector
.createCMSRequest(statusRequest.getSignatureData(),
statusRequest.getSignatureDataByteRange());
String slRequest = SLMarschaller
.marshalToString(of
- .createCreateCMSSignatureRequest(createCMSSignatureRequestType));
+ .createCreateCMSSignatureRequest(pack.getRequestType()));
response.setContentType("text/xml");
response.getWriter().write(slRequest);
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/DataURLServlet.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/DataURLServlet.java
index cf25c2f2..5b951b78 100644
--- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/DataURLServlet.java
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/DataURLServlet.java
@@ -36,9 +36,9 @@ import org.slf4j.LoggerFactory;
import at.gv.egiz.pdfas.web.exception.PdfAsSecurityLayerException;
import at.gv.egiz.pdfas.web.helper.PdfAsHelper;
-import at.gv.egiz.sl.CreateCMSSignatureResponseType;
-import at.gv.egiz.sl.ErrorResponseType;
-import at.gv.egiz.sl.InfoboxReadResponseType;
+import at.gv.egiz.sl.schema.CreateCMSSignatureResponseType;
+import at.gv.egiz.sl.schema.ErrorResponseType;
+import at.gv.egiz.sl.schema.InfoboxReadResponseType;
import at.gv.egiz.sl.util.SLMarschaller;
/**
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSignParameters.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSignParameters.java
new file mode 100644
index 00000000..4658372b
--- /dev/null
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSignParameters.java
@@ -0,0 +1,43 @@
+package at.gv.egiz.pdfas.web.ws;
+
+import java.io.Serializable;
+
+public class PDFASSignParameters implements Serializable {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -2375108993871456465L;
+
+ public enum Connector {
+ JKS,
+ MOA
+ }
+
+ Connector connector;
+ String position;
+ String profile;
+
+
+ public Connector getConnector() {
+ return connector;
+ }
+ public void setConnector(Connector connector) {
+ this.connector = connector;
+ }
+ public String getPosition() {
+ return position;
+ }
+ public void setPosition(String position) {
+ this.position = position;
+ }
+ public String getProfile() {
+ return profile;
+ }
+ public void setProfile(String profile) {
+ this.profile = profile;
+ }
+
+
+
+}
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigning.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigning.java
new file mode 100644
index 00000000..0b75c0e0
--- /dev/null
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigning.java
@@ -0,0 +1,11 @@
+package at.gv.egiz.pdfas.web.ws;
+
+import javax.jws.WebService;
+import javax.jws.soap.SOAPBinding;
+import javax.jws.soap.SOAPBinding.Style;
+
+@WebService
+@SOAPBinding(style = Style.RPC)
+public interface PDFASSigning {
+ public byte[] signPDFDokument(byte[] inputDocument, PDFASSignParameters parameters);
+}
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigningImpl.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigningImpl.java
new file mode 100644
index 00000000..39c6c24d
--- /dev/null
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigningImpl.java
@@ -0,0 +1,34 @@
+package at.gv.egiz.pdfas.web.ws;
+
+import javax.jws.WebService;
+import javax.xml.ws.WebServiceException;
+import javax.xml.ws.soap.MTOM;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import at.gv.egiz.pdfas.web.config.WebConfiguration;
+import at.gv.egiz.pdfas.web.helper.PdfAsHelper;
+
+@MTOM
+@WebService(endpointInterface = "at.gv.egiz.pdfas.web.ws.PDFASSigning")
+public class PDFASSigningImpl implements PDFASSigning {
+
+ private static final Logger logger = LoggerFactory
+ .getLogger(PDFASSigningImpl.class);
+
+ public byte[] signPDFDokument(byte[] inputDocument,
+ PDFASSignParameters parameters) {
+ try {
+ return PdfAsHelper.synchornousServerSignature(inputDocument, parameters);
+ } catch(Throwable e) {
+ logger.error("Server Signature failed.", e);
+ if(WebConfiguration.isShowErrorDetails()) {
+ throw new WebServiceException("Server Signature failed.", e);
+ } else {
+ throw new WebServiceException("Server Signature failed.");
+ }
+ }
+ }
+
+}
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/package-info.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/package-info.java
new file mode 100644
index 00000000..0ed0acfc
--- /dev/null
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/package-info.java
@@ -0,0 +1,8 @@
+/**
+ *
+ */
+/**
+ * @author afitzek
+ *
+ */
+package at.gv.egiz.pdfas.web.ws; \ No newline at end of file
diff --git a/pdf-as-web/src/main/webapp/WEB-INF/sun-jaxws.xml b/pdf-as-web/src/main/webapp/WEB-INF/sun-jaxws.xml
new file mode 100644
index 00000000..67648647
--- /dev/null
+++ b/pdf-as-web/src/main/webapp/WEB-INF/sun-jaxws.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
+ version="2.0">
+ <endpoint name="SOAP Sign"
+ implementation="at.gv.egiz.pdfas.web.ws.PDFASSigningImpl"
+ url-pattern="/wssign"/>
+</endpoints> \ No newline at end of file
diff --git a/pdf-as-web/src/main/webapp/WEB-INF/web.xml b/pdf-as-web/src/main/webapp/WEB-INF/web.xml
index 4d8a32cb..800c4505 100644
--- a/pdf-as-web/src/main/webapp/WEB-INF/web.xml
+++ b/pdf-as-web/src/main/webapp/WEB-INF/web.xml
@@ -29,6 +29,15 @@
<url-pattern>/*</url-pattern>
</filter-mapping>
+ <listener>
+ <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
+ </listener>
+
+
+ <servlet>
+ <servlet-name>SOAPSign</servlet-name>
+ <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
+ </servlet>
<servlet>
<servlet-name>SignServlet</servlet-name>
<description>
@@ -78,6 +87,10 @@
mapping for the same servlet, if you wish to. -->
<servlet-mapping>
+ <servlet-name>SOAPSign</servlet-name>
+ <url-pattern>/wssign</url-pattern>
+ </servlet-mapping>
+ <servlet-mapping>
<servlet-name>SignServlet</servlet-name>
<url-pattern>/Sign</url-pattern>
</servlet-mapping>