2016-02-23 66 views
0

我正在爲jboss的jaas實現開發自定義登錄模塊。我希望能夠訪問我的登錄模塊中的HttpServletRequest對象。有沒有人知道這樣做的最佳方式,如果可能的話?我一直在研究這一點,到目前爲止,我認爲我需要使用某種回調,但我不確定。我發現一些WebSphere文檔顯示它們有一個WSServletRequestCallback,似乎可以執行此操作。請建議一個簡單的例子或文檔,如果jboss的jaas實現有這樣的事情。自定義登錄模塊訪問JBOSS中的httpservletrequest EAP

更新:

@kwart:根據你的建議,我編碼以下。請建議,如果這是正確的方式:

protected CallbackHandler _callbackHandler;   
    HttpServletRequest request = null; 
    ObjectCallback objectCallback = null; 

    Callback[] callbacks = new Callback[1]; 
    callbacks[0] = objectCallback = new ObjectCallback("HttpServletRequest: "); 

    try 
    { 
     _callbackHandler.handle(callbacks); 
    } 
    catch (Exception e) 
    { 
     logger.logp(Level.SEVERE, CLASSNAME, METHOD_NAME, "Error handling callbacks", e); 
    } 

    try 
    { 
     if (objectCallback != null) 
     { 
      request = (HttpServletRequest) PolicyContext.getContext("javax.servlet.http.HttpServletRequest"); 
     } 
    } 
    catch (PolicyContextException e) { 
     logger.logp(Level.SEVERE, CLASSNAME, METHOD_NAME, "Error getting request", e); 
     } 
    catch (Exception e) 
    { 
     logger.logp(Level.SEVERE, CLASSNAME, METHOD_NAME, "Exception occured augmenting JbossSubject", e); 
    } 
+1

你基本上正在重新設計JASPI(C)的ServerAuthModule。除非由於某種原因被迫使用專有API,否則考慮利用已經包含在Java EE中的內容。 – Uux

+0

爲什麼使用ObjectCallback的魔法?你不需要它。 PolicyContext行足以檢索HttpServletRequest實例。 – kwart

+1

「jboss'jaas的實現」? Jboss沒有實現jaas!它鬆散地重新使用JDK中的一些JAAS類... –

回答

1

我從this網站得到了解決方案。

使用的JSPI認證。按照here的解釋在單獨的安全域中配置驗證模塊。 創建custom authenticatorcustom login module,配置認證器jboss-web.xml和登錄模塊安全域standalone xml

我將它們放在一個單獨的模塊中,並將其添加到jboss-deployment-structure.xml。在驗證器中存儲ThreadLocal中的http請求,並通過簡單讀取存儲在線程本地中的值,在我的登錄模塊中檢索它。

2

您可以使用JACC的PolicyContext來檢索LoginModule方法HttpRequestObject

HttpServletRequest request = (HttpServletRequest) javax.security.jacc.PolicyContext 
    .getContext(HttpServletRequest.class.getName()); 

更新:中的LoginModule here查找樣本使用。

+0

我用上面的方法來獲取請求對象到我的登錄模塊。將此模塊部署到服務器。但不知道該如何演示這個給我的團隊。關於如何向他們展示請求對象被檢索的任何想法。 – devlperMoose

+0

JACC方法在JBOSS 6中爲我工作,但不能在JBOSS 7中工作。請允許我告訴我是否有這個JBOSS 7的替代方案嗎? – devlperMoose

+0

我在EAP 6.3上試過了,它能正常工作。我預計它也在JBoss AS 7.x上工作。產品「EAP 6.x」基於社區項目「AS 7」,因此行爲應該非常相似。 :)而這個問題談到EAP 6.3 – kwart