2012-02-12 83 views
3

我使用JEE6安全註解@RolesAllowed("Admin")和編程登錄:如何模擬/模擬/繞過JEE6容器管理登錄?

FacesContext context = FacesContext.getCurrentInstance(); 
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest(); 
request.login(loginUser.getUserName(), loginUser.getPassword()); 

然而,對於測試,我希望能夠「模擬」用戶登錄,並傻瓜,一個用戶登錄的應用而不是實際執行上面的代碼。 request.login(...)將ping容器進行登錄,我只想告訴容器foo用戶已經登錄,並且不需要檢查密碼。我真的不想要一個涉及編寫登錄模塊或更改整個容器設置的解決方案。

謝謝你們!

編輯#1:我正在使用什麼appserver?

我正在使用GlassFish 3.1.1。但是,如果可能的話,我想要一個使用任何可用的JEE6 API的「獨立於容器」的解決方案。編輯#2:Balus先生(一位廣受好評的專家)不瞭解任何繞過實際登錄的api中立方式。我想我可以編寫自己的「Yes-Man」登錄模塊,但我很好奇,如果有人知道如何繞過GlassFish環境中的限制。

謝謝!

編輯#3:對於後來發現這個問題的任何人,我切換到Apache Shiro。我過去使用過Spring Security,但對於這個應用程序來說這太過分了。

+0

什麼程序。你使用的服務器/容器? – szhem 2012-02-12 19:41:54

回答

1

沒有API提供的設施。您可以創建一個Filter,它檢查某個VM參數或環境變量,甚至是一個JNDI變量,然後自動執行登錄。

E.g.

String login = System.getProperty("development.login"); 

if (login != null && request.getRemoteUser() == null) { 
    String[] nameAndPassword = login.split(":"); // Assuming "name:password". 
    request.login(nameAndPassword[0], nameAndPassword[1]); 
} 
+0

好吧。那麼Glassfish中的非API應用程序如何? – 2012-02-13 01:35:19

+0

沒有想到。您也可以考慮創建一個基於「記住我」功能的cookie(您的web應用程序的最終用戶最終也可以從中受益)。這只是一點點工作,需要你真正理解安全影響(或者你可能想要尋找第三方框架,比如Spring Security)。上面的過濾器例子非常簡單。只需在dev環境中設置VM參數即可。我甚至看到了遠程地址請求被測試的方法(我個人不相信)。 – BalusC 2012-02-13 04:54:47

+0

我過去大量使用SpringSecurity ...我試圖做一個純粹的JEE應用程序,但它看起來像安全性有很多缺點。 :( – 2012-02-13 05:08:28