我正在使用Jersey來構建一個RESTful服務來替換現有的傳統服務。在移交給澤西島之前檢查請求實體
傳統請求格式要求身份驗證憑證在POST請求中傳遞。這使得在將請求傳遞給Jersey之前驗證請求(使用Spring安全性)很尷尬,因爲必須讀取POST正文以提取身份驗證憑證,然後在切換到Jersey之前重新打包。
這意味着,對於每個POST請求,請求流必須被讀取,重新序列化,然後由Jersey MessageBodyReader
再次讀取。我不喜歡這個,因爲它效率低下。理想情況下,我想要做的是將傳入消息轉換爲規範消息格式,對其進行身份驗證,然後將該規範格式傳遞給Jersey。看起來JAX-RS似乎不支持這種事情。
有沒有人有避免這種雙重請求正文的方法的建議?任何RESTful框架允許我使用自定義的規範消息格式,而不是在InputStream
?
謝謝!
感謝您的回答。我同意第二個選擇是尷尬的,我會避免它。第一種選擇,即我一直這樣做的方式,要求我反序列化消息體兩次:一次在身份驗證期間,一次在Jersey傳遞給MessageBodyReader時。 – maxenglander 2013-02-24 19:36:49
嗯...你是否在認證片段之外使用通用對象作爲消息體,或者消息體是否總是包含相同的對象?如果後者那麼也許第二種選擇不會太糟糕。 – jgm 2013-02-24 19:40:01
不幸的是,郵件正文的格式可能會有所不同。我想要做的一件事就是實現一個實現'InputStream'的規範對象,並實現一個自定義的'MessageBodyReader',它簡單地將'InputStream'轉換爲適當的規範對象。不過,我不喜歡「打擊」澤西島的想法。我想我會選擇1,或者尋找另一個更適合我的需求的框架。理想情況下,我希望通過RESTful路由支持一些企業模式。 – maxenglander 2013-02-24 20:16:17