編寫JSP和Servlet是容易的,但通常我們會面臨很多安全問題。當然,我們會在程序中加入大量的安全代 碼來解決這個問題,但加入這樣的安全硬編碼將使程序變得不靈活,而且不易維護。因此,在本文中將給出一 種無需修改代碼即可達到安全目的方法,並提供了一個實例進行說明。
在本文中的例子將通過一個用戶名和密碼以及傳輸層的SSL來保護應用程序的war文件。用戶名和密碼以明 文在網絡中傳輸。這一切並不需要編輯應用程序中的Java代碼和JSP頁。而為了使Servlet和JSP頁變得安全, 我們要做的只是配置web.xml文件而已。
一、設置XML文件
配置web.xml文件的第一步是定義一個安全約束,也就是一個<security-constraint>標簽。這個標 簽將保護響應的URL,以使特定的用戶才能訪問它。注意我們必須要使用<http-method>標簽定義一個或 多個HTTP方法。如果你想讓安全約束應用到所有的HTTP方法,那麼只要簡單的忽略<http-method>標簽 即可。
做完上面的設置後,下一步需要設置SSL。我們可以使用<user-data-constraint>標簽以及這個標簽 的一個子標簽<transport-guarantee>來設置。卻將<transport-guarantee>的值設置成 CONFIDENTIAL。
最後一步我們需要設置驗證方法。這需要設置<login-config>標簽以及子標簽<auth-method> 。在這裡我們將<auth-method>設為BASIC。下面是web.xml文件的部分內容:
<security-constraint>
< web-resource-collection>
<web-resource-name>Servlet Application
</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>ttrole</role-name>
</auth-constraint>
<user-data-constraint>
<transport- guarantee>CONFIDENTIAL
</transport-guarantee>
</user-data- constraint>
</security-constraint>
<login-config>
<auth- method>BASIC</auth-method>
<realm-name>default</realm-name>
</login-config>
<security-role>
<role-name>ttrole</role- name>
</security-role>
在上述的例子中,只有用戶"ttrole"才能訪問Servlet和JSP頁。
在Java EE環境中將使用這些用戶驗證,但在許多操作系統環境中,用戶和組關聯。因此,security-role -mapping在用戶頭組之間提供了一座橋梁。在Java EE 5應用服務器中,我們可以在sun-application.xml文件 中按如下的方式字義security-role-mapping標簽:
<sun-application>
<security-role-mapping>
<role- name>myrole</role-name>
<principal-name>myuser</principal- name>
</security-role-mapping>
<security-role-mapping>
<role-name>ttrole</role-name>
<group-name>ttgroup</group- name>
</security-role-mapping>
<security-role-mapping>
<role-name>arole</role-name>
<principal-name>ttuser</principal- name>
</security-role-mapping>
</sun-application>
二、運行實例代碼
在這一節我們來講一下如何運行上面的程序。在這裡我們使用的集成開發環境是NetBeans IDE 5.5以及 NetBeans企業開發包。在安裝完NetBeans後,我們需要進行以下幾步來運行這個程序。
1. 首先我們需要下載這個程序,下載連接為:例子代碼。 然後將其解壓。
2. 啟動NetBeans。
3. 打開webann工程(剛才zip文件中的NetBeans工程),如果出現一個" Resolve missing server problem"提示信息,說明應用服務器還沒有被加到NetBeans的服務器列表中。我們可以選擇Tools > Server Manager,然後將相應的服務器加到列表中。
4. 啟動Sun內嵌在NetBeans中的Java System Application Server。我們還可以通過在命令中輸入如下的 命令來啟動服務器:
<appserv_install_dir>/bin/asadmin start-domain domain1
上面的<appserv_install_dir>是應用服務器的安裝目錄。