簡體   English   中英

在jBoss定制登錄模塊中設置用戶名

[英]Set Username in jBoss custom login module

我正在為實現了jboss的自定義登錄模塊的企業應用程序工作。 它具有基於表單的安全性登錄名,其中用戶提供用戶名和密碼。 在登錄模塊中,將對照數據庫檢查憑據,並進行一些附加檢查。 現在,我想使用戶能夠通過一次性令牌(例如一些哈希字符串:EF223222131)登錄,該令牌想通過電子郵件作為URL發送給他: applicationServer:8080/myApplication/login2.jsp?hash=EF223222131 login2.jsp頁面login2.jsp我具有用於基於表單的身份驗證的相同表單,並將用戶名和密碼留空,並添加字段哈希。 所有字段均被隱藏,並且javascript觸發表單在頁面加載時提交。 在登錄模塊中,我設法獲得了哈希值:

HttpServletRequest httpRequest = 
    (HttpServletRequest)PolicyContext.getContext("javax.servlet.http.HttpServletRequest");
    String hashV = httpRequest.getParameter("hashValue");

然后,我從數據庫集標識和角色中獲得用戶,並且loginOk = true; 並且commitOk = true; 在各自的方法中。 但是在我的Web應用程序中,用戶名保持為空。 httpRequest.getUserPrincipal().getName()返回空字符串。 另外,如果我調用EJB,也會從sessionContext.getCallerPrincipal().getName()獲得空字符串。

有沒有辦法從“登錄”模塊設置這些值? 還是通過URL中的令牌登錄的替代方法?

我正在使用jboss 4.0.3SP1和Java 1.4.2,但我認為它應該與較新的配置相同。

問題出在登錄模塊的主題對象中。 commit()方法中,有一個定義主題對象的代碼:

if(!subject.getPrincipals().contains(identity)) {
        subject.getPrincipals().add(identity);
}
Group g = new SimpleGroup("Roles");
g.addMember(new SimplePrincipal((String) options.get("defaultRole")));
subject.getPrincipals().add(g);

另外,我還添加了:

Group callerPrincipal = new SimpleGroup("CallerPrincipal");
callerPrincipal.addMember(identity);
subject.getPrincipals().add(callerPrincipal);

新的用戶名在會話(從可用httpRequest.getUserPrincipal().getName()在servlet和來自sessionContext.getCallerPrincipal().getName()中的EJB)

我從鏈接中找到了解決方案: Jboss社區

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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