Weblogic6.0部署和配置WEB應用程序(5)

發表于:2007-07-01來源:作者:點擊數: 標簽:
配置WEB應用程序的 安全 性 You can secure a Web Application by using authentication, by restricting access to certain resources in the Web Application, or by using security calls in your servlet code. Several types of security realms can be
配置WEB應用程序的安全
You can secure a Web Application by using authentication, by restricting aclearcase/" target="_blank" >ccess to certain resources in the Web Application, or by using security calls in your servlet code. Several types of security realms can be used. Security realms are discussed in the document Security Fundamentals. Note that a security realm is shared across multiple virtual hosts.
可以通過認證、限制訪問WEB應用程序中的某些資源或在servlet代碼中使用安全調用來保護應用程序。有幾種安全域(security realm)類型可以使用。文檔安全性基本原理討論了安全域。注意安全域在多個之間是共享的。
設置WEB應用程序安全認證
在WEB應用程序部署描述符中使用<login-config>元素來定義WEB應用程序的安全認證。在這個元素中,可以定義包含用戶證書、認證方法、需認證資源的位置的安全域。關于建立安全域的信息參考安全性基本原理。
要建立WEB應用程序安全認證:
1.    選擇一個認證方法??蛇x項有:
BASIC
Basic認證用WEB瀏覽器顯示用戶名/密碼對話框。這個用戶名和密碼通過域被認證。
FORM
基于Form的認證要求返回一個包含用戶名和密碼的HTML表單。從表單元素返回的字段必須是j_username和j_password,action屬性必須是j_security_check。下面是使用FORM認證的HTML代碼示例:
<form method="POST" action="j_security_check">
   <input type="text" name="j_username">
   <input type="password" name="j_password">
</form>
用來產生HTML表單的資源可能是一個HTML頁面,一個JSP,或一個servlet。使用<form-login-page>元素來定義這個資源。
當提供login頁面服務時,就會建立HTTP會話對象。因此,當認證成功后在頁面調用session.isNew()方法會返回FALSE。
CLIENT-CERT
使用客戶端證書來進行認證請求。更多信息參考配置SSL協議。
2.    如選擇FORM認證,也需定義用來產生HTML頁面的資源位置和響應認證失敗的資源。有關配置FORM認證的說明參考<login-config>。
3.    定義要認證的域。如未指定一個特定的域,就會使用這樣一個域,這個域定義在管理控制臺的Web Application->Configuration->Other標簽的Auth Realm Name字段中。更多信息參考<login-config>。
多個WEB應用程序,Cookies和安全認證
默認地,Weblogic服務器給所有WEB應用程序分配相同的cookie名稱(JSESSIONID)。不管使用何種類型的認證,所有使用相同cookie名稱的WEB應用程序使用單個認證認定方式。一旦用戶被認證,對于任何使用相同cookie名稱的WEB應用程序的請求,認證都是有效的。將不會再次提示用戶認證。
如要求WEB應用程序單獨認證,就要為WEB應用程序指定一個唯一的cookie名稱。用Weblogic特有部署描述符weblogic.xml中的<session-descriptor>元素的CookieName參數指定cookie名稱。更多信息,參考session-descriptor元素。
限制訪問WEB應用程序的資源
可以為WEB應用程序中指定的資源(servlets,JSPs,或HTML頁面)應用安全約束。要應用安全約束:
1.    定義一個被映射到安全域中一個或多個成員的角色。在WEB應用程序部署描述符的<security-role>元素中定義角色。然后將這些角色映射到域中的成員上,用<security-role-assignment>元素(參考Weblogic特有部署描述符weblogic.xml)。
2.    使用嵌套在<web-resource-collection>元素里的<url-pattern>元素來定義要應用安全約束的WEB應用程序資源。<url-pattern>可以是一個目錄,文件名或一<servlet-mapping>。
要對整個WEB應用程序應用安全約束,使用如下<url-pattern>:
<url-pattern>/*</url-pattern>
3.    使用嵌套在<web-resource-collection>元素里的<http-method>元素定義要應用安全約束的HTTP 方法(GET或POST)。
4.    使用嵌套在<user-data-constraint>元素里的<transport-guarantee>元素定義在客戶端和服務器之間通信是否使用SSL。
Listing 8-6 限制資源的示例

web.xml entries:
<security-constraint>
     <web-resource-collection>
          <web-resource-name>SecureOrdersEast</web-resource-name>
          <description>
             Security constraint for resources in the orders/east directory
          </description>
          <url-pattern>/orders/east/*</url-pattern>
          <http-method>POST</http-method>
          <http-method>GET</http-method>
     </web-resource-collection>
     <auth-constraint>
          <description>constraint for east coast sales</description>
          <role-name>east</role-name>
          <role-name>manager</role-name>
     </auth-constraint>
     <user-data-constraint>
          <description>SSL not required</description>
          <transport-guarantee>NONE</transport-guarantee>
     </user-data-constraint>
</security-constraint>
...
<security-role>
     <description>east coast sales</description>
     <role-name>east</role-name>
</security-role>
<security-role>
     <description>managers</description>
     <role-name>manager</role-name>
</security-role>
weblogic.xml entries:
<security-role-assignment>
     <role-name>east</role-name>
     <principal-name>tom</principal-name>
     <principal-name>jane</principal-name>
     <principal-name>javier</principal-name>
     <principal-name>maria</principal-name>
</security-role-assignment>
<security-role-assignment>
     <role-name> manager </role-name>
     <principal-name>peter</principal-name>
     <principal-name>georgia</principal-name>
</security-role-assignment>

在servlets編程中使用用戶和角色
在servlet代碼編程中訪問用戶和角色,使用javax.servlet.http.HttpServletRequest.isUserInRole(String role)方法。字符串role被映射到嵌套在一個WEB應用程序部署描述符的<servlet>聲明上的<security-role-ref>元素里的<role-name>元素提供的名字上。<role-link>元素映射到一個定義在WEB應用程序描述符的<security-role> 元素的<role-name>上。
例如:
Listing 8-7 安全角色映射示例

Servlet code:
isUserInRole("manager");
web.xml entries:
<servlet>
. . .
   <role-name>manager</role-name>
   <role-link>mgr</role-link>
. . .
</servlet>
<security-role>
   <role-name>mgr</role-name>
</security-role>
weblogic.xml entries:
<security-role-assignment>
   <role-name>mgr</role-name>
   <principal-name>al</principal-name>
   <principal-name>george</principal-name>
   <principal-name>ralph</principal-name>
</security-role-ref>

配置WEB應用程序的外部資源
當訪問外部資源(如通過JNDI的WEB應用程序的DataSource)時,可以映射要在代碼中查找的JNDI名稱到綁定在JNDI樹上的實際JDNI名稱。使用web.xml和weblogic.xml部署描述符來建立這個映射,這樣就允許不必改變應用程序代碼就能改變這些資源。提供一個Java代碼中使用的名稱,綁定在JNDI樹里的資源名稱,資源的Java類型,并指定是通過servlet編程處理資源安全性,還是應用與HTTP請求相關的證書。
要配置外部資源:
1.    在部署描述符中登記將在代碼中使用的資源名稱、Java類型和安全認證類型。有關建立部署描述符條目的指示參考外部資源參考。
2.    映射資源名到JNDI名稱。有關建立部署描述符條目的指示參考映射外部資源。
下例中假設你已定義一個名為accountDataSource的數據源。有關更多信息參考JDBC數據源。
Listing 8-8 使用DataSource的示例

Servlet code:
javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup("myDataSource");
web.xml entries:
<resource-ref>
. . .
   <res-ref-name>myDataSource</res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>CONTAINER</res-auth>
. . .
</resource-ref>
weblogic.xml entries:
<resource-description>
   <res-ref-name>myDataSource</res-ref-name>
   <jndi-name>accountDataSource</jndi-name>
</resource-description>

在WEB應用程序中引用EJBs
在WEB應用程序中引用EJBs,必須給出它們在WEB應用程序部署描述符里的名稱,這個名稱已被映射到EJB的JNDI名稱,EJB的JNDI名稱在weblogic-ejb-jar.xml部署描述符文件中定義。
要在WEB應用程序中配置使用EJBs:
1.    登記在代碼中用來查找EJB的EJB引用名稱,Java類名,在WEB應用程序部署描述符中的<ejb-ref>元素的EJB本地和遠程接口的類名。更多有關建立部署描述符條目的指示參考EJBs資源參考。
2.    映射定義在Weblogic特有的部署描述符weblogic.xml的<ejb-reference-description>元素的引用名稱到定義在weblogic-ejb-jar.xml 文件里的JNDI名稱。更多有關建立部署描述符條目的指示參考映射EJB資源。
如WEB應用程序是企業應用程序包(.ear文件)的一部分,就可以通過在.ear中用<ejb-link>元素定義的名稱來引用EJB。
設置會話管理
默認地,已經建立Weblogic服務器處理會話跟蹤。你不必建立使用會話跟蹤的任何屬性。但是,配置Weblogic服務器如何管理會話是調整應用程序以提升性能的關鍵部分。調整依賴于以下因素:
·    希望命中servlet的用戶數
·    命中servlet的并發用戶數
·    一個會話持續的時間
·    希望為每個用戶保存多少數據。
會話屬性
用Weblogic特有的部署描述符中的屬性來配置Weblogic服務器會話跟蹤。有關編輯Weblogic特有部署描述符的指示參考定義會話參數。
會話超時
可指定HTTP會話終止的時間間隔。當會話終止時,保存在會話中的所有數據將被丟棄。用如下兩個方法的一個來設置時間間隔:
·    設置weblogic特有部署描述符weblogic.xml的<session-descriptor> 元素的TimeoutSecs屬性。這個值以秒為單位。
·    設置WEB應用程序描述符web.xml里的<session-timeout>元素。這個值以分鐘為單位,并覆蓋TimeoutSecs屬性(在Weblogic特有的部署描述符的<session-descriptor>元素中)設置的值。
配置會話cookies
當客戶端瀏覽器支持時,Weblogic服務器使用cookies進行會話管理。
Weblogic服務器用來跟蹤會話的cookies默認被設置為臨時的,不會超過瀏覽器的生命期而存在。當用戶離開瀏覽器時, cookies就會丟失,并且認為會話生命期已經結束。這種行為是會話使用的精髓,推薦這種使用會話的方式。
可能要用在Weblogic特有部署描述符(weblogic.xml)里定義的屬性來配置跟蹤會話的cookies許多方面,參考會話和cookie相關屬性的完整列表。
有關編輯Weblogic特有的部署描述符的說明,參考定義會話參數。
使用較長生命期的Cookies
對于較長生命期的、客戶端的用戶數據,應用程序應通過HTTP  servlet  API在瀏覽器建立和設置自己的cookies,但不要試圖使用同HTTP會話相關聯的cookies。應用程序可能用cookie來自動登錄一個特定機器上的用戶,在這種情況下,應建立一個新的持續長時間的cookie。記住只能從客戶端機器傳送cookie。如用戶必須從多個位置訪問應用程序,那么應用程序應將數據保存在服務器上。
不能將瀏覽器cookie的生命期與一個會話生命期直接連接起來。如一個cookie在與它相關聯的會話前過期,那個會話就會成為孤會話。如會話在與它相關聯的cookie之前過期,那么servlet就不能找到會話。在那點上,當調用getSession()方法時,就會指派一個新會話。你應當只臨時使用會話。
配置會話持久性
以下是會話持久性的四個不同實現方法:
·    內存(單服務器,不復制)
·    文件系統持久性
·    JDBC持久性
·    內存內復制(在集群中)
前三個在這兒討論;內存內復制(in-memory replication)在理解HTTP會話狀態復制中討論。
對于文件,JDBC和內存內復制,需設置附加的包含PersistentStoreType的屬性。每一方法有它自己的屬性集,如下:
公共屬性
通過設置Weblogic特有部署描述符(weblogic.xml)中的以下屬性,來配置會話的數量。這些特性只在使用會話持久性時才適用:
CacheSize
限制同時在內存中保持活動的緩存會話數目。如希望有大量的并發活動會話,不要使這些會話耗盡服務器的RAM,因為這也許會導致虛擬內存交換的性能問題。當緩存充滿時,最近最少使用的會話就會被保存到持久性存貯器中,它在被請求時自動被重新調用。當不使用持久性時,這個屬性被忽略,并且不會有允許在主內存中存在的會話數量的軟限制。默認地,緩存會話數為1024。最小是16,最大是Integer.MAX_VALUE。一個空會話至少使用100字節,并隨著它數據的增長而增長。
SwapIntervalSecs
當達到cacheEntries限制時,將最近最少使用的會話從緩存中清除并保存到持久性存貯器之間服務器等待的時間間隔。
如未設置,這個屬性默認是10秒;最小1 秒,最大604800(1星期)。
InvalidationIntervalSecs
Sets the time, in seconds, that WebLogic Server waits between doing house-cleaning checks for timed-out and invalid sessions, and deleting the old sessions and freeing up memory. Set this parameter to a value less than the value set for the <session-timeout> element. Use this parameter to tune WebLogic Server for best performance on high traffic sites.
設置Weblogic服務器在檢查超時、失效會話與清除舊會話釋放內存之間等待的時間,以秒為單位。這個參數值不能小于<session-timeout>元素設置的值。用這個參數來調整Weblogic服務器,以在高度擁擠時獲得最佳性能。
最小值是每秒(1)一次,最大值是每星期(604800秒)一次。如未設置,參數默認是60秒。
在WEB應用程序部署描述符web.xml的<session-config>元素中設置<session-timeout>。
使用基于內存、單服務器、無復制的持久性存貯器
要使用基于內存、單服務器、無復制的持久性存貯器,將屬性PersistentStoreType設為memory。當使用基于內存的存儲器時,所有會話信息都保存在內存中,在停止和重啟Weblogic服務器時會丟失。
使用基于文件的持久存儲器
對于會話有基于文件的存儲器:
1.    將PersistentStoreType設為file。
2.    設置Weblogic服務器存儲會話的目錄。有關設置這個目錄的更多信息,參考PersistentStoreDir。
如沒有給這個屬性明確設置值,Weblogic服務器就會為你建立一個臨時目錄。
如在集群中使用基于文件的持久性,就必須明確地將此屬性值設置為一個集群中所有服務器都能訪問的共享目錄。你必須自己建立這個目錄。
使用數據庫作為持久性存儲器
對于會話的基于JDBC持久性存儲器:
1.    要設置JDBC為持久存儲方式,將屬性PersistentStoreType設為jdbc。
2.    用屬性PersistentStorePool設置持久性存儲器使用的JDBC連接池。使用在Weblogic服務器管理控制臺定義的連接池名稱。
有關設置數據庫連接池更多的細節參考管理JDBC連接。
3.    設置與相對于有權限用戶的連接的ACL(訪問控制表)。有關建立數據庫連接的更多細節參考管理JDBC連接。
4.    為基于JDBC持久性建立一個名為wl_servlet_sessions的數據庫表。連接到此數據庫的連接池需有對此表的讀/寫權限。下表列示了在建立此表時應使用的列名和數據類型:
Table 8-4 wl_servlet_sessions表
Column name    Type
wl_id    Variable-width alphanumeric column, up to 100 characters; for example, Oracle VARCHAR2(100).The primary key must be set as follows:wl_id + wl_context_path.
wl_context_path    Variable-width alphanumeric column, up to 100 characters; for example, Oracle VARCHAR2(100). This column is used as part of the primary key. (See the wl_id column description.)
wl_is_new    Single char column; for example, Oracle CHAR(1)
wl_create_time    Numeric column, 20 digits; for example, Oracle NUMBER(20)
wl_is_valid    Single char column; for example, Oracle CHAR(1)
wl_session_values    Large binary column; for example, Oracle LONG RAW
wl_access_time    Numeric column, 20 digits; for example, NUMBER(20)
wl_max_inactive_interval    Integer column; for example, Oracle Integer. Number of seconds between client requests before the session is invalidated. A negative time value indicates that the session should never timeout.
如正在使用Oracle DBMS,可使用如下的SQL語句建立wl_servlet_sessions表:
create table wl_servlet_sessions
  ( wl_id VARCHAR2(100) NOT NULL,
    wl_context_path VARCHAR2(100) NOT NULL,
    wl_is_new CHAR(1),
    wl_create_time NUMBER(20),
    wl_is_valid CHAR(1),
    wl_session_values LONG RAW,
    wl_access_time NUMBER(20),
    wl_max_inactive_interval INTEGER,
   PRIMARY KEY (wl_id, wl_context_path) );
可用DBMS來修改執行的SQL語句。
注意:可以配置JDBC會話持久性在裝載會話數據失?。ㄓ肑DBCConnectionTimeoutSecs屬性)之前等待連接池中JDBC連接的持續時間。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97