2012-10-08 86 views
6

我試圖JBoss容器內的不同身份驗證下通過這樣的(剝離異常處理)的用戶登錄編程方式運行代碼:登錄用戶通過編程JAAS

登錄的 newuser
LoginContext ctx = ctx = 
    new LoginContext("MyLoginSchema", 
     new UsernamePasswordCallbackHandler("newuser", "") 
    ); 
ctx.login(); 

Subject.doAs(ctx.getSubject(), new PrivilegedAction<T>() { 
    @Override 
    public T run() { 
     Subject.getSubject(AccessController.getContext()); 
     InitialContext ic = new InitialContext(); 
     EJBContext sctxLookup = (EJBContext) ic.lookup("java:comp/EJBContext"); 
     Principal principal = sctxLookup.getCallerPrincipal(); 
    }   
}); 

作品(電話LoginModule已成功),但Subject.doAs()未將新主題與EJBContext關聯。 run()中的代碼 - 方法仍然從EJBContext中提取舊用戶的主體。

我測試獲取登錄的用戶,但另一種方法相同的行爲在這裏:

Subject caller = (Subject) PolicyContext.getContext("javax.security.auth.Subject.container"); 

任何想法?

回答

2

您現在使用哪個LoginModule?在JBoss 6.1中,您必須使用ClientLoginModule在容器中進行身份驗證。

+0

是的!這纔是重點。我加了ClientLoginModule,它工作。 – roehrijn

0

我的理解是這個目前不支持JBoss AS 7.1。見this thread

編輯

我寫到這裏是錯誤的,線程僅適用於客戶端登錄(在JBoss之外)。

+0

它被支持。見上面的答案。 – roehrijn

+0

啊,是的,這是嚴重的側面登錄,我的壞。 –

+0

不,答案是正確的。我的代碼在LoginModule堆棧中與ClientLoginmodule協同工作。 – roehrijn

相關問題