2011-05-29 103 views
0

我在做一個增量JSP-> Wicket遷移。我保留了JSP應用程序並逐頁進行遷移。我根本沒有辦法從JSP < - > wicket pages返回。但是我的問題是在JSP中,我登錄的用戶憑據存儲在Bean(UserBean,scope:session)中,而在JSP中,我檢查登錄用戶的每個頁面豆。Wicket認證角色:從JSP注入外部用戶憑證

但是我怎樣才能獲得這些信息在檢票口?所以從我的JSP頁面如果用戶登錄,在Wicket頁面加載它可以讀取並設置suer信息,以便我的檢票登錄頁面不會出現。

我便門頁面使用檢票-auth的角色,並檢查有:

@AuthorizeInstantiation("ADMIN") public class HomePage extends BasePage {.....} 

我在檢票口我自己UserDetailsS​​ervcice和MyAuthenticationWebSession。

從唐羅比一些嘗試和幫助後,在這裏我在檢票口有用戶ID從會話:

 final RequestCycle requestCycle = RequestCycle.get(); 
     WebRequest wr=(WebRequest)requestCycle.getRequest(); 
     HttpServletRequest hsr= wr.getHttpServletRequest(); 

     AuthenticatedWebSession session = OrbitWebSession.get(); 
     String username = (String)hsr.getSession().getAttribute("SessionUser"); 

現在,究竟我在哪裏可以設置用戶名,密碼和通話的驗證,我的網頁不重定向到登錄頁面?誰調用authenticate()方法以及如何?我在受保護的頁面上嘗試了onBeforeRender()方法,但它不起作用。 :(

回答

1

更多關於登錄過程的代碼可能會幫助我們做出更加完整的答案,但基本上你必須訪問正常的servlet容器會話,從而可以從wicket的某處訪問該bean。把這種邏輯是什麼地方你MyAuthenticationWebSession,以便它知道在用戶登錄。

要獲得從檢票口代碼servlet容器會話,你可以使用

httpSession = 
((WebRequest)request).getHttpServletRequest().getSession(); 

如果在點你」重新把這個在你的wicket代碼中,你還沒有這個WebRequest對象(這是李KELY一個ServletWebRequest對象)時,你可以從RequestCycle得到它:

RequestCycle requestCycle = RequestCycle.get(); 
Request request = requestCycle.getRequest(); 
1

身份驗證是由AuthenticatedWebSession在登錄過程中調用。不幸的是,上述類中的大多數方法都標記爲final,因此定製有點困難。

我認爲你應該可以做的是在你自己的會話的構造函數中使用受保護的方法signIn(boolean value)。你在那裏得到一個請求,你應該希望能夠得到你的「SessionUser」,然後通過你的UserDetailsS​​ervice提取你的用戶,調用signIn(true)併爲該用戶初始化正確的角色。如果調用signIn(true),則不應該獲得重定向到登錄。