2013-02-27 36 views
1

我有這樣的情況: 登錄表單使用DatabaseServerLoginModule - 所有的認證數據都存儲在分隔表的數據庫,我需要通過標誌j_usertype [從下拉列表]以j_security_checkDatabaseServletLoginModule能在桌子之間切換並帶來特定用戶。Java和Jboss7:j_security_check定製實施

有什麼想法....?

回答

1

您可以輕鬆地將更多參數添加到登錄表單中。當然,您需要編寫自己的登錄模塊。問題是然後獲取添加的參數到登錄模塊!

沒有符合標準的方法來向j_security_check添加額外的參數(這是一個恥辱 - 很多人需要這樣做)。

但是,有一個狡猾的方法來實現相同的效果。有一個不起眼但有用的安全規範,稱爲Java Authorization Contract for Containers(JACC)。它做了很多事情;其中一個比較晦澀難懂的問題是,它使您能夠從調用堆棧中的任意位置訪問與當前請求相關的各種對象。你可以使用PolicyContext這個類,它有一個靜態方法getContext。這從通過字符串鍵標識的「策略上下文處理程序」中獲得對象。一些這樣的處理程序中所需的說明書,包括:

4.6.1.3 HttpServletRequest的策略背景信息處理程序

所有Servlet容器必須註冊一個PolicyContextHandler其getContext方法調用時返回一個javax.servlet.http.HttpServletRequest對象用「javax.servlet.http.HttpServletRequest」鍵。當這個處理程序被激活時,容器必須返回對應於容器處理的組件請求的HttpServletRequest對象。

把它們一起,你可以這樣做:

HttpServletRequest request = (HttpServletRequest)PolicyContext.getContext("javax.servlet.http.HttpServletRequest") 

一旦你有一個HttpServletRequest,你可以很容易地得到任何請求參數與getParameter

我有責任指出i am not the first person to suggest this。這個答案也表明稍微好一點的形式:

HttpServletRequest request = (HttpServletRequest)PolicyContext.getContext(HttpServletRequest.class.getName()) 
+0

好吧然後....但我怎麼可以將這些參數在standalone.xml中的jboss 7.x? – 2013-03-02 08:23:17

+0

什麼?你是什​​麼意思「在standalone.xml中傳遞這些參數」? – 2013-03-02 09:34:37

+0

哇.... thnx湯姆...哇!我想通了.....我仔細閱讀你的答案這是一個欺詐解決方案畢竟hehehehe :) thnx再次.. – 2013-03-02 14:20:46