我們有一個Tomcat ValveBase類實現正在爲我們的servlet容器應用程序進行身份驗證。驗證我們的http REST呼叫的一種方法是對它們進行簽名,然後檢查服務器端的簽名。我們在ValveBase類中檢查。多次閱讀請求流
問題是,在我們使用請求的InputStream(用於驗證簽名)之後,我們將請求(org.apache.catalina.connector.Request)傳遞給下一個閥門實現,並在它到達servlet,inputStream消失了。由於在簽名驗證程序中使用了內容,因此不會傳送內容。
在javax.servlet API中,可以使用HttpServletRequestWrapper實現自己的ServletRequest,並將實際請求作爲構造函數參數傳遞。在這種情況下,我們避免了只讀一次內容的情況,但在催化劑請求的情況下,似乎比我們想象的更加微妙。有任何想法嗎?謝謝。
認證REST服務不需要定製的ValveBase類,您可以配置2路SSL(客戶端證書認證)。 – gerrytan
不幸的是,這些是我們必須實現的規格,我們也必須依賴ValveBase所屬的遺留代碼。 – nucatus