2013-01-04 61 views
1

我正在創建GWT應用程序並希望添加管理控制檯。GWT實現管理控制檯的最佳方式

我第一次嘗試創建一個管理員窗口(窗口小部件),然後就顯示出它時,管理員登錄項。

這種方法的問題在於,每一個用戶訪問我的網頁下載負責顯示和操作管理控制檯的JavaScript - 我不喜歡這個主意,無論是性能和安全性的原因。

由於管理控制檯只是一個「窗口」我的應用程序裏面 - 我希望當他註銷下載它僅當用戶作爲管理員,在「清除」它登錄。

什麼是我可用的選項來實現使用GWT?

回答

-1

代碼分裂是快速正骯髒的解決方案移動管理的東西了面向客戶的JS的;然而,任何熟悉w/gwt的人都會知道如何訪問未下載的代碼拆分。

真正安全的選擇是運行第二個入口點併爲管理員編譯。這樣,您的服務器可以避免任何涉及管理功能的任何事物。

將所有管理功能放到主編譯中不允許的包中也是明智的做法;這樣,你永遠不會泄露不安全的資源。

+0

讓我檢查我是否正確理解它,我有一個主要版本 - 這是每個客戶端加載的頁面,當客戶端以管理員身份登錄時,我將他重定向到與正常用戶頁面不同的頁面,但是與管理控制檯鏈接,這個頁面實際上是一個不同的編譯gwt模塊,我是對嗎?如果是這樣,我怎麼能不讓用戶在第一個地方打開管理啓用頁面? – bennyl

+0

是的,如果您想要第二個入口點包含第一個入口點,那麼您需要更改第一個入口點,以將除<入口點...>之外的所有東西都放入不同的.gwt中.xml,比如說,Inherit.gwt.xml。因此,主入口點繼承了com.foo.Inherit,並添加了客戶端入口點。 Admin入口點可以繼承相同的通用模塊,擴展客戶端入口點並添加管理功能。 – Ajax

+0

至於安全性,這取決於你的服務器環境。一個窮人的安全方法是在你的管理入口點建立一個陷阱。延遲調用應用程序,直到將密碼輸入到文本字段中。這將爲您帶來一些運行時安全性,儘管好的黑客可以查找您正在測試的字符串鍵。最好發送一個哈希值。也就是說,使用某種字符串操作來混淆該值。你甚至可以只用一堆你+在一起的字符,這樣整個密碼就不是純文本的,所有人都可以看到。 – Ajax

-1

使用自己的管理控制檯活動創建單獨的視圖。您可以使用Activities and Places design pattern

此外,您還可以使用code-splitting以確保只有管理員加載必要的管理控制檯的代碼。

編輯:

在您的入口點類,你應該檢查是否有用戶進行身份驗證,併爲admin,允許或不允許訪問您的應用程序的這一部分。你也應該在服務器端做同樣的事情。當用戶註銷時,關閉該應用程序。

+0

不錯,但我怎麼能強制加載代碼,以「淨化」當用戶註銷?我應該爲所有頁面刷新 - 這樣代碼會再次下載而沒有管理部分? – bennyl

+0

在您的入門級課程中,您可以(也應該)檢查用戶是否已通過身份驗證,並且是管理員,並允許訪問您的應用的此部分或不允許訪問。你也應該在服務器端做同樣的事情。當用戶註銷時,關閉該應用程序。 –

+0

順便說一下,刷新頁面時代碼不會再次「下載」 - 它會被瀏覽器緩存。但是,緩存這個管理代碼並沒有什麼壞處 - 如果認證檢查失敗,它將無法訪問/使用。 –

1

對阿賈克斯的解決方案的後續行動,更多的一些細節&選項:

  • 您的管理模塊部署在不同的戰爭不同的Java項目,說admin.war。
  • 您的Admin Java項目繼承自您的主項目,因此您擁有所有常用功能+管理功能。
  • 您的管理員模塊javascript只能從admin.war Web應用程序訪問,例如其中的index.html。
  • 您的admin.war Web應用程序只能通過ssl隧道後面的本地主機訪問。通過這種方式,只有通過私鑰才能訪問服務器的管理員用戶可以在成功打開隧道後訪問管理模塊,而無需其他人。這個選項是超級安全的 - 你可以控制誰有權訪問,而且所有的通信都是加密的。但是這個選項只適用於你的管理員用戶很少,通過你的服務器授權的公共密鑰嚴格控制他們。否則,我想你必須通過密碼和代碼分割訴諸於上述認證機制。