2011-10-14 58 views
0

我移植一些Java EE模塊,從春到EJB和現在面臨的,我需要某種形式的預認證的調用服務方法之前的問題。預認證的用戶AS 6

這個問題其實很簡單。呼叫從內部協議處理程序(一些線程啓動專有協議處理程序並獲得使用自定義的TCP協議的請求)的用武之地。不是這個連接已經對用戶進行了認證,並且想要接下來調用一個服務方法。此服務方法需要一個主要信息(用戶名)進行處理。

因此,在春季,我們簡單地推SecurityContext中的本地線程,並刪除它時調用已完成。

協議處理程序 - >設置SecContext - >電話 - >刪除SexContext - >結束

有什麼類似於Java EE的/ JBoss的?我知道有「@RunAs」結構,但我不知道他們是否可以在編程中使用。或者有沒有使用JAAS LoginContext類「登錄」的方法?但是,我如何配置JAAS呢?

回答

1

如果這純粹是得到一個身份進入JAAS方面的問題,您應該能夠做這樣的事情:

final String username; // get this from somewhere 
Princpal principal = new Principal() { 
    public String getName() { 
     return username; 
    } 
}; 
Subject subject = new Subject(true, Collections.singleton(principal), Collections.emptySet(), Collections.emptySet()); 
Subject.doAs(subject, new PrivilegedAction<Void>() { 
    public Void run() { 
     // do your method call here 
    } 
}); 

注意,您可以通過它綁定到從的PrivilegedAction返回一個值而不是Void,而是通過實現PrivilegedExceptionAction來引發異常。

顯然,如果你有一個原則是什麼更復雜的想法,你可以用它(實現的toString,hashCode時和equals將是一個不錯的主意)。