JSP頁面中限制對 Web 資源的訪問

來源:互聯網
上載者:User

現在,可以指示伺服器使用何種驗證方法了。“了不起,”你說道,“除非我能指定一個來收到保護的URL,否則沒有多大用處。”沒錯。指出這些URL並說明他們應該得到何種保護正是security-constriaint元素的用途。此元素在web.xml中應該出現在login-config的緊前面。它包含是個可能的子項目,分別是:web-resource-collection、auth-constraint、user-data-constraint和display-name。
  
  下面各小節對它們進行介紹。
  web-resource-collection
  此元素確定應該保護的資源。所有security-constraint元素都必須包含至少一個web-resource-collection項。此元素由一個給出任意標識名稱的web-resource-name元素、一個確定應該保護的URL的url-pattern元素、一個指出此保護所適用的HTTP命令(GET、POST等,預設為所有方法)的http-method元素和一個提供資料的可選description元素組成。例如,下面的Web-resource-collection項(在security-constratint元素內)指出Web應用的proprietary目錄中所有文檔應該受到保護。
  <security-constraint>
  <web-resource-coolection>
  <web-resource-name>Proprietary</web-resource-name>
  <url-pattern>/propritary/*</url-pattern>
  </web-resource-coolection>
  <!-- ... -->
  </security-constraint>
  重要的是應該注意到,url-pattern僅適用於直接存取這些資源的客戶機。特別是,它不適合於通過MVC體繫結構利用RequestDispatcher來訪問的頁面,或者不適合於利用類似jsp:forward的手段來訪問的頁面。這種不勻稱如果利用得當的話很有好處。例如,servlet可利用MVC體繫結構尋找資料,把它放到bean中,發送請求到從bean中提取資料的JSP頁面並顯示它。我們希望保證決不直接存取受保護的JSP頁面,而只是通過建立該頁面將使用的bean的servlet來訪問它。url-pattern和auth-contraint元素可通過聲明不允許任何使用者直接存取JSP頁面來提供這種保證。但是,這種不勻稱的行為可能讓開發人員放鬆警惕,使他們偶然對應受保護的資源提供不受限制的訪問。
  auth-constraint
  儘管web-resource-collention元素質出了哪些URL應該受到保護,但是auth-constraint元素卻指出哪些使用者應該具有受保護資源的訪問權。此元素應該包含一個或多個標識具有存取權限的使用者類別role-name元素,以及包含(可選)一個描述角色的description元素。例如,下面web.xml中的security-constraint元素部門規定只有指定為Administrator或Big
Kahuna(或兩者)的使用者具有指定資源的訪問權。
  <security-constraint>
  <web-resource-coolection> ... </web-resource-coolection>
  <auth-constraint>
  <role-name>administrator</role-name>
  <role-name>kahuna</role-name>
  </auth-constraint>
  </security-constraint>
  重要的是認識到,到此為止,這個過程的可移植部分結束了。伺服器怎樣確定哪些使用者處於任何角色以及它怎樣存放使用者的口令,完全有賴於具體的系統。
  例如,Tomcat使用install_dir/conf/tomcat-users.xml將使用者名稱與角色名稱和口令相關聯,正如下面例子中所示,它指出使用者joe(口令bigshot)和jane(口令enaj)屬於administrator和kahuna角色。
  <tomcat-users>
  <user name="joe" password="bigshot" roles="administrator,kahuna" />
  <user name="jane" password="enaj" roles="kahuna" />
  </tomcat-users>
  user-data-constraint
  這個可選的元素指出在訪問相關資源時使用任何傳輸層保護。它必須包含一個transport-guarantee子項目(合法值為NONE、INTEGRAL或CONFIDENTIAL),並且可選地包含一個description元素。transport-guarantee為NONE值將對所用的通訊協議不加限制。INTEGRAL值表示資料必須以一種防止截取它的人閱讀它的方式傳送。雖然原理上(並且在未來的HTTP版本中),在INTEGRAL和CONFIDENTIAL之間可能會有差別,但在當前實踐中,他們都只是簡單地要求用SSL。例如,下面指示伺服器只允許對相關資源做HTTPS串連:
  <security-constraint>
  <!-- ... -->
  <user-data-constraint>
  <transport-guarantee>CONFIDENTIAL</transport-guarantee>
  </user-data-constraint>
  </security-constraint>
  display-name
  security-constraint的這個很少使用的子項目給予可能由GUI工具使用的安全約束項一個名稱
  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.