[英]java http authentication reuse between servlets
不知道如何正確地提出問題。
我有兩個Web應用程序:一個帶有servlet的A和另一個帶有兩個servlet的B,兩者均受web.xml中的基本身份驗證保護(部署到weblogic服務器)。
用戶使用瀏覽器本地登錄/密碼窗口(由weblogic管理)對A和B的servlet之一進行身份驗證(不確定我所說的是否是垃圾)。
但是,應用程序A的servlet也應該調用B的其他servlet,這也需要身份驗證。
問題是:可以避免嗎? 用戶已經對兩個Web應用程序都進行了身份驗證,因此我想以某種方式重用此身份驗證(我真的不擅長所有這些HTTP會話事物術語,不要對我:之以鼻:))。
cookie似乎無法使用,因為它實際上是服務器端通信。
以下應該解決問題:
創建javax.servlet.Filter
從請求中提取jsessionid並以某種方式存儲每個用戶(在我的情況下,我將其作為details
放入org.springframework.security.core.Authentication
,確保此過濾器在spring-security的過濾器之后運行)。
將其作為cookie頭添加到每個servlet-servlet請求中:
org.apache.commons.httpclient.HttpMethodBase.setRequestHeader("Cookie", "jsessionid="+org.springframework.security.core.Authentication.getDetails().toString());
在適當情況下。
在應用程序A中的servlet代碼中執行此操作:
URLConnection conn = new URL("http://hostname/appB/servlet1");
String authorizationHeader = request.getHeader("authorization");
if (null != authorizationHeader) {
conn.setRequestProperty("authorization", authorizationHeader);
}
InputStream inStream = conn.getInputStream();
//Read from inStream in the usual way
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.