簡體   English   中英

servlet之間的Java http身份驗證重用

[英]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似乎無法使用,因為它實際上是服務器端通信。

以下應該解決問題:

  1. 創建javax.servlet.Filter從請求中提取jsessionid並以某種方式存儲每個用戶(在我的情況下,我將其作為details放入org.springframework.security.core.Authentication ,確保此過濾器在spring-security的過濾器之后運行)。

  2. 將其作為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM