客戶端
要發送憑據使用HTTP Authorization
頭的API,指定憑據形式爲Basic username:password
。用戶名:密碼字符串必須使用稱爲Base64的編碼方案進行編碼。因此,一個例子可以頭看起來像這樣:
Authorization: Basic d2lraTpwZWRpYQ==
至於其餘的規範規定,在客戶端 - 服務器通信應該是無狀態的,你必須包括對每個請求的憑據頭。通常,您將在客戶端使用會話cookie來識別用戶,以便他不必在每個請求中輸入他的憑證。
服務器端
要檢查您的新澤西州的REST Service中的憑據,你需要捕捉和攔截所有傳入的請求。澤西島提供了一個名爲ContainerRequestFilters
的概念來做到這一點。例如,如果你使用Tomcat,你可以在你的web.xml這樣添加你的servlet定義中這種類型的過濾器:
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>your.package.BasicAuthFilter</param-value>
</init-param>
引用的類BasicAuthFilter
需要實現球衣ContainerRequestFilter
接口和覆蓋public ContainerRequest filter(ContainerRequest request)
方法。裏面的方法,你將基本做到以下幾點:
- 從請求的Authorization頭
- 解碼它們獲取的Base64編碼憑據(即使用
javax.xml.bind.DatatypeConverter.parseBase64Binary()
)
- 使用您的UserDAO(或其他數據源提供者)以檢查證書是否有效
- 返回狀態代碼
401 Unauthorized
如果驗證失敗(即throw new WebApplicationException(Status.UNAUTHORIZED)
)
- 如果憑據有效,僅僅是爲了將其委託給新澤西州的資源,是負責處理它
你可以找到this博客文章一個很好的例子返回請求。
您需要對此有何反饋?如果不是,我的回答對你有幫助,你可以接受我的帖子來回答這個問題。 Greetz :) – benjiman