java流方式接收pdf_java – 在Itext 7中,如何获取范围流来签署pdf?
getRangeStream不是從PdfSignatureAppearance重構為PdfSigner的唯一方法,并以此方式受到保護.其他方法也存在同樣的問題,例如preClose和close,它們也是用于PDF文檔的數字簽名的PreSign和PostSign servlet中使用的方法,您似乎使用這些方法或者至少借用代碼.
正如我所說,這已經完成,使iText 7用戶使用signDeferred,signDetached和signExternalContainer方法,這些方法通常足以簽署應用程序并“正確執行”,即使用另一種,現在不再使用公共方法了這會創建有效的簽名.
不幸的是,PreSign和PostSign servlet不能使用這三種方法,它們實際上就像signDetached代碼被分成兩半,相關的局部變量存儲在HTTP會話中.
因此,您基本上有兩個選擇:
盡管如此,請使用受保護的方法
除非我忽略了某些內容,否則甚至可以通過從PdfSigner派生自己的簽名者類并使這些方法和可能的成員變量再次公開訪問來完成;乍一看使用反射魔法似乎沒有必要.
更改PreSign和PostSign servlet體系結構
如果您可以從保留內存中的簽名相關對象(通過HTTP會話引用)切換到僅將中間PDF文件保存在內存中甚至磁盤上,并且可能是內存中的半成品簽名容器,您可以這樣繼續:
>使用帶有IfternalSignatureContainer實現的PdfSigner.signExternalContainer“簽署”PDF的servlet替換PreSign servlet,該實現僅提供虛擬簽名,例如:新字節[0].
此IExternalSignatureContainer檢索所尋找的范圍流作為其sign方法的參數,因此它可以計算范圍流哈希.
現在,帶有虛擬簽名的PDF可以保存到磁盤或保存在內存中.并且基于范圍流哈希,您可以像以前一樣繼續構建和提供PdfPKCS7實例.并將其保存在內存中,例如從HTTP會話引用.
>用一個servlet替換PostSign servlet,該servlet在完成PdfPKCS7實例的送入之前生成一個CMS簽名容器.然后使用PdfSigner.signDeferred方法將此容器注入已保存的PDF.
或者,您甚至可以將整個CMS簽名容器創建移動到客戶端.在這種情況下,所有會話必須記住中間PDF存儲的位置…
總結
以上是生活随笔為你收集整理的java流方式接收pdf_java – 在Itext 7中,如何获取范围流来签署pdf?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java socket回调_Java S
- 下一篇: 信用卡年费怎么交