2012-04-14 24 views
0

在Glassfish上使用容器管理的安全性,您如何製作個人「個人資料」頁面並限制只有登錄的人才能更改它?假設你有用戶「約翰」和「阿曼達」,他們都有「用戶」角色,你怎麼能確定只有「約翰」可以改變他的個人資料頁面,而不是「阿曼達」?如何在用戶成功登錄後調用方法?

<form method="POST" action="j_security_check"> 
    <table> 
     <tr> 
      <td>User name:</td> 
      <td><input type="text" name="j_username" /></td> 
     </tr> 
     <tr> 
      <td>Password:</td> 
      <td><input type="password" name="j_password" /></td> 
     </tr> 
     <tr> 
      <td><input type="submit" value="Login" /></td> 
     </tr> 
    </table> 
</form> 
+0

不知道爲什麼你張貼的登錄JSP。確保當前用戶的用戶標識符與正在更改的配置文件的用戶標識符相匹配。 – 2012-04-14 11:37:50

+0

它不是JSP,它是JSF 2.0 - > XHTML。在頁面被訪問之前,你會在哪裏/如何檢查它? – LuckyLuke 2012-04-14 11:42:13

+0

配置文件頁面對所有用戶來說應該是相同的,意思是組成和可訪問性。內容將根據從數據庫中提取的用戶數據而有所不同。 「John」不能簡單地改變「Amandas」配置文件,因爲首先他們在不同的會話中工作,其次,您存儲基於唯一ID的數據,所以如果「John」對他的配置文件進行任何更改,只有他的「行」在數據庫中將得到更新。限制訪問意味着您只需將您的個人檔案頁面放置在受限制的頁面下方,即只有登錄的角色爲「user」的用戶才能訪問該頁面。檢查例如。 [玻璃魚安全](http://tinyurl.com/c4pmfcx) – Fallup 2012-04-14 12:07:27

回答

1

難道你不能檢查從會話登錄的用戶和要求從數據庫中獲取的配置文件是否相同?如果它們不匹配,用戶將無法編輯該頁面。理想情況下,我會將這種用戶會話邏輯放在服務器過濾器中,以便它可以處理所有請求。

1

這可以很容易地與SEAM框架完成。您只需創建安全接口@Admin,然後創建一個檢查器方法public @Secure @Admin checkAdmin(Identity identity){}

之後,您可以將@Admin添加到您的方法中。

其他的事情可以做,這是比較容易: 只需使用屬性「渲染」,並檢查該用戶登錄

相關問題