大學(xué)生java學(xué)習(xí)心得(多篇) _第1頁
大學(xué)生java學(xué)習(xí)心得(多篇) _第2頁
大學(xué)生java學(xué)習(xí)心得(多篇) _第3頁
大學(xué)生java學(xué)習(xí)心得(多篇) _第4頁
大學(xué)生java學(xué)習(xí)心得(多篇) _第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

大學(xué)生java學(xué)習(xí)心得(精選多篇)

第一篇:java學(xué)習(xí)心得筆記j2ee學(xué)習(xí)筆記

注:框架可以用word菜單中的“視圖/文檔結(jié)構(gòu)圖”

看到

j2ee模式

valueobject用于把數(shù)據(jù)從某個(gè)對象/層傳遞到其他

對象/層的任意java對象。

通常不包含任何業(yè)務(wù)方法。

也許設(shè)計(jì)有公共屬性,或者提供可以獲取屬性值的

get方法。

jsp

1.jsp的基礎(chǔ)知識

Idirective

|一scripting

jsp1|_action

I

Itemplatedata:除jsp語法外,jsp引擎不

能解讀的東西

1)在jsp中使用的directive主要有三個(gè):

a)page指令

b)include指令

c)taglib指令

在jsp的任何地方,以任何順序,一個(gè)頁面可以包含

任意數(shù)量的page指令

2)scripting包括三種類型

a);

b);

c);

3)action

標(biāo)準(zhǔn)的動(dòng)作類型有:

a);

b);

d);

e);

f);

g);

h);

1.注釋:

2.;

session可以不賦值,默認(rèn)為true,如果

session="false”,則在jsp頁面中,隱含的變量session

就不能使用。

3.請求控制器結(jié)構(gòu)

也被稱之為jspmodel2architecture

這種途徑涉及到使用一個(gè)servlet或一個(gè)jsp作為一

個(gè)應(yīng)用程序或一組頁面的入口點(diǎn)。

為創(chuàng)建可維護(hù)的jsp系統(tǒng),requestcontroller是最

有用的方式之一。

不是jsp,而是java類才是放置控制邏輯的正確的地

方。

請求控制器的命名模式為:

請求控制器類的命名模式為:xxxrequestcontroller

2.jsp中的javabean

jsp三種bean的類型

1)頁面bean

2)會話bean

3)應(yīng)用bean

大多數(shù)的系統(tǒng)會使用一個(gè)會話bean來保持狀態(tài),而

對每一個(gè)頁面使用一個(gè)頁面bean來對復(fù)雜的數(shù)據(jù)進(jìn)行表

不O

頁面bean是一個(gè)模型,而jsp是一個(gè)視圖。

3.customtag

bean是信息的攜帶者,

而tag更適用于處理信息。

標(biāo)記庫包含一個(gè)標(biāo)記庫描述符和用于實(shí)現(xiàn)customtag

的java類

在翻譯階段,jsp容器將使用tld來驗(yàn)證頁面中的所

有的tag是否都被正確的使用。

標(biāo)記處理程序只是一個(gè)簡單的適配器,而真正的邏輯

是在另一個(gè)類中實(shí)現(xiàn)的,標(biāo)記處理程序只是提供了一個(gè)供其

他的可復(fù)用的類的jsp接口

servlet

1.servletconfig

;一個(gè)servletconfig對象是servlet

container在servletinitialization的時(shí)候傳遞給

servlet的。

servletconfig包涵servletcontext和一些

name/valuepair

&W61548;servletcontext接口封裝了web應(yīng)用程序

的上下文概念。

2.會話跟蹤

1)session

&W61548;當(dāng)一個(gè)client請求多個(gè)servlets時(shí),一

個(gè)session可以被多個(gè)servlet共享。

;通常情況下,如果serverdetect到

browser支持cookie,那么url就不會重寫。

2)cookie

;在javaservlet中,如果你光cookie

cookie=newcookie

那么當(dāng)用戶退出browser時(shí),cookie會被刪除掉,而

不會被存儲在客戶端的硬盤上。

如果要存儲cookie,需加一句

&W61548;cookie是跟某一個(gè)server相關(guān)的,運(yùn)行在

同一個(gè)server上的servlet共享一個(gè)cookie.

3)urlrewriting

在使用urlrewriting來維護(hù)sessionid的時(shí)候,

每一次http請求都需要encodeurl

典型的用在兩個(gè)地方

1);

);

2);

);

3.singlethreadmodel

默認(rèn)的,每一個(gè)servletdefinitioninacontainer

只有一個(gè)servletclass的實(shí)例。

只有實(shí)現(xiàn)了singlethreadmodel,container才會讓

servlet有多個(gè)實(shí)例。

servletspecification上建議,不要使用

synchronized,而使用singlethreadmodel0

singlethreadmodel

保證servlet在同一時(shí)刻只處理一個(gè)客戶的請求。

singlethreadmodel是耗費(fèi)資源的,特別是當(dāng)有大量

的請求發(fā)送給servlet時(shí),singlethreadmodel的作用是使

包容器以同步時(shí)鐘的方式調(diào)用service方法。

這等同于在servlet的service方法種使用

synchronized.

singlethreadmodel一般使用在需要響應(yīng)一個(gè)heavy

request的時(shí)候,比如是一個(gè)需要和數(shù)據(jù)庫打交道的連接。

2.在重載servlet地init方法后,一定要記得調(diào)用;

3.theclient通過發(fā)送一個(gè)blankline表示它已經(jīng)

結(jié)束request

而theserver通過關(guān)閉thesocket來表示response

已結(jié)束了。

4.一個(gè)httpservlet可以送三種東西給client

1)asinglestatuscode

2)anynumberofhttpheaders

3)aresponsebody

5.servlet之間信息共享的一個(gè)最簡單的方法就是

6.post和get

post:將form內(nèi)各字段名稱和內(nèi)容放置在html

header內(nèi)傳送給server

get:?之后的查詢字符串要使用urlencode,經(jīng)過

urlencode后,這個(gè)字符串不再帶有空格,以后將在server

上恢復(fù)所帶有的空格。

get是web上最經(jīng)常使用的一種請求方法,每個(gè)超鏈

接都使用這種方法。

7.就是webapplicatin的deploymentdescriptor

作用有:組織各類元素

設(shè)置initparam

設(shè)置安全性

8.requestdispatcher用來把接收到的request

forwardprocessing至U另一個(gè)servlet

要在一個(gè)response里包含另一個(gè)servlet的output

時(shí),也要用至Urequestdispatcher.

9.servlet和jsp在同一個(gè)jvm中,可以通過

serveltcontext的

setattribute

getattribute

removeattribute

來共享對象

10.利用得到的string存在字符集問題。

可以用strtitle=;

strtitle=newstring,“gb2312");

如果你希望得到更大得兼容性

stringencoding=;

〃確定applicationserver用什么編碼來讀取輸入

的。

strtitle=newstring,“gb2312");

xml

1.xml基礎(chǔ)知識

1.一個(gè)xml文檔可以分成兩個(gè)基本部分:

首部

內(nèi)容

2.xml名字空間規(guī)范中指定:

xml文檔中的每一個(gè)元素都處在一個(gè)名字空間中;如

果沒有指定的名字空間,缺省的名字空間就是和該元素相關(guān)

聯(lián)的名字空間。

3.adocumentthatiswell-formedobeysallof

therulesofxmldocuments

“ifawe11-formeddocumentusesadocumenttype

definition,anditfollowsalltherulesofthedtd,

thenitisalsoavaliddocument

4.atagisthetextbetweenthe;

“anelementisthestarttag,theendtag,and

everythinginbetween

5.標(biāo)簽實(shí)際上包含了“元素”和“屬性”兩部

分。

用元素來描述有規(guī)律的數(shù)據(jù)。

用屬性來描述系統(tǒng)數(shù)據(jù)。

如果你有一些數(shù)據(jù)要提供給某個(gè)應(yīng)用程序,該數(shù)據(jù)就

可能要用到一個(gè)元素。

如果該數(shù)據(jù)用于分類,或者用于告知應(yīng)用程序如何處

理某部分?jǐn)?shù)據(jù),或者該數(shù)據(jù)從來沒有直接對客戶程序公開,

那么它就可能成為一種屬性。

6.cdatac是character的縮寫。

/1\

2.webservice

2.1webservice的基本概念

webservice是一種可以接收從internet或者

intranet上的其它系統(tǒng)中傳遞過來的請求,輕量級的獨(dú)立的

通訊技術(shù)。

這種技術(shù)允許網(wǎng)絡(luò)上的所有系統(tǒng)進(jìn)行交互。隨著技術(shù)

的發(fā)展,一個(gè)web服務(wù)可以包含額外的指定功能并且可以在

多個(gè)b2b應(yīng)用中協(xié)作通訊。

web服務(wù)可以理解請求中上下文的關(guān)系,并且在每一

個(gè)特定的情況下產(chǎn)生動(dòng)態(tài)的結(jié)果。這些服務(wù)會根據(jù)用戶的身

份,地點(diǎn)以及產(chǎn)生請求的原因來改變不同的處理,用以產(chǎn)生

一個(gè)唯一的,定制的方案。這種協(xié)作機(jī)制對那些只對最終結(jié)

果有興趣的用戶來說,是完全透明的。

uddi

在用戶能夠調(diào)用web服務(wù)之前,必須確定這個(gè)服務(wù)內(nèi)

包含哪些商務(wù)方法,找到被調(diào)用的接口定義,還要在服務(wù)端

來編制軟件。所以,我們需要一種方法來發(fā)布我們的web服

務(wù)。

uddi是一個(gè)主要針對web服務(wù)供應(yīng)商和使用者的新

項(xiàng)目。uddi項(xiàng)目中的成員可以通過uddibusinessregistry

來操作web服務(wù)的調(diào)用,ubr是一個(gè)全球性的服務(wù)。

web服務(wù)供應(yīng)商可以在ubr中描述并且注冊他們的服

務(wù)。

用戶可以在ubr中查找并定位那些他們需要的服務(wù)。

uddi是一種根據(jù)描述文檔來引導(dǎo)系統(tǒng)查找相應(yīng)服務(wù)

的機(jī)制。

uddi包含標(biāo)準(zhǔn)的“白皮書”類型的商業(yè)查詢方式,

“黃皮書”類型的局部查找,以及

“綠皮書”類型的服務(wù)類型查找。

uddi利用soap消息機(jī)制來發(fā)布,編輯,瀏覽以及查

找注冊信息。它采用xml格式來封裝各種不同類型的數(shù)據(jù),

并且發(fā)送到注冊中心或者由注冊中心來返回需要的數(shù)據(jù)。

wsdl

對于商業(yè)用戶來說,要找到一個(gè)自己需要使用的服

務(wù),他必須知道如何來調(diào)用。

wsdl規(guī)范是一個(gè)描述接口,語義以及web服務(wù)為了

響應(yīng)請求需要經(jīng)常處理的工作的xml文檔。這將使簡單地服

務(wù)方便,快速地被描述和記錄。

以下是一個(gè)wsdl的樣例:

targetnamespace=“http:〃/“

xmlns:tns="http:〃/“

xmlns:xsdl="http:〃/"

xmlns:soap="http:///wsdl/soap/v

xmlns="http:〃/wsdl/">;

xmlns="http:///xx/10/xmlschema”>;

type="tns:stockquoteporttype”>;

transport=“http:〃/soap/http”/>;

soapaction="http:〃/getlasttradeprice”/>;

;myfirstservice;

它包含了以下的關(guān)鍵信息:

消息的描述和格式定義可以通過xml文檔中的;和;

標(biāo)記來傳送。

;標(biāo)記中表示了消息傳送機(jī)制?!?/p>

;標(biāo)記指定了編碼的規(guī)范。

;標(biāo)記中表示服務(wù)所處的位置。

wsdl在uddi中總是作為一個(gè)接口描述文檔。因?yàn)?/p>

uddi是一個(gè)通用的用來注冊wsdl規(guī)范的地方,uddi的規(guī)范

并不限制任何類型或者格式描述文檔。這些文檔可能是一個(gè)

wsdl文檔,或者是一個(gè)正規(guī)的包含導(dǎo)向文檔的web頁面,也

可能只是一個(gè)包含聯(lián)系信息的電子郵件地址。

現(xiàn)在java提供了一個(gè)javaapiforwsdl規(guī)范。它

提供了一套能快速處理wsdl文檔的方法,并且不用直接對

xml文檔進(jìn)行操作,它會比jaxp更方便,更快速。

soap

當(dāng)商業(yè)用戶通過uddi找到你的wsdl描述文檔后,他

通過可以simpleobjectaccessprotocol調(diào)用你建立的

web服務(wù)中的一個(gè)或多個(gè)操作。

soap是xml文檔形式的調(diào)用商業(yè)方法的規(guī)范,它可以

支持不同的底層接口,象http或者smtp。

之所以使用xml是因?yàn)樗莫?dú)立于編程語言,良好的

可擴(kuò)展性以及強(qiáng)大的工業(yè)支持。之所以使用http是因?yàn)閹?/p>

乎所有的網(wǎng)絡(luò)系統(tǒng)都可以用這種協(xié)議來通信,由于它是一種

簡單協(xié)議,所以可以與任何系統(tǒng)結(jié)合,還有一個(gè)原因就是它

可以利用80端口來穿越過防火墻。

soap的強(qiáng)大是因?yàn)樗唵巍oap是一種輕量級的,

非常容易理解的技術(shù),并且很容易實(shí)現(xiàn)。它有工業(yè)支持,可

以從各主要的電子商務(wù)平臺供應(yīng)商那里獲得。

從技術(shù)角度來看,soap詳細(xì)指明了如何響應(yīng)不同的請

求以及如何對參數(shù)編碼。一個(gè)soap封裝了可選的頭信息和

正文,并且通常使用httppost方法來傳送到一個(gè)http服

務(wù)器,當(dāng)然其他方法也是可以的,例如smtposoap同時(shí)支

持消息傳送和遠(yuǎn)程過程調(diào)用。以下是一個(gè)soap請求。

post/stockquotehttp/

host:

content-type:text/xml;charset=”utf-8”

content-length:nnnn

soapaction:”some-uri”

xmlns:soap-env=”http:///soap/envelope/"

關(guān)。

以下是你應(yīng)該回避使用的一些java特色,并且在你

的ejb組件的實(shí)現(xiàn)代碼中要嚴(yán)格限

制它們的使用:

1.使用static,非final字段。建議你在ejb組件

中把所有的static字段都聲明為final型的。這樣可以保

證前后一致的運(yùn)行期語義,使得ejb容器有可以在多個(gè)java

虛擬機(jī)之間分發(fā)組件實(shí)例的靈活性。

2.使用線程同步原語來同步多個(gè)組件實(shí)例的運(yùn)行。避

免這個(gè)問題,你就可以使ejb容器靈活的在多個(gè)java虛擬

機(jī)之間分發(fā)組件實(shí)例。

3.使用awt函數(shù)完成鍵盤的輸入和顯示輸出。約束它

的原因是服務(wù)器方的商業(yè)組件意味著提供商業(yè)功能而不包

括用戶界面和鍵盤的i/。功能。

4.使用文件訪問/操作。ejb商業(yè)組件意味著使用資

源管理器如jdbc來存儲和檢索數(shù)據(jù)而不是使用文件系統(tǒng)

apio同時(shí),部署工具提供了在部署描述器中存儲環(huán)境實(shí)體,

以至于ejb組件可以通過環(huán)境命名上下文用一種標(biāo)準(zhǔn)的方法

進(jìn)行環(huán)境實(shí)體查詢。所以,使用文件系統(tǒng)的需求基本上是被

排除了。

5.監(jiān)聽和接收socket連接,或者用socket進(jìn)行多路

發(fā)送。ejb組件并不意味著提供網(wǎng)絡(luò)socket服務(wù)器功能,但

是,這個(gè)體系結(jié)構(gòu)使得ejb組件可以作為socket客戶或是

rmi客戶并且可以和容器所管理的環(huán)境外面的代碼進(jìn)行通

訊。

6.使用映象api查詢ejb組件由于安全規(guī)則所不能訪

問的類。這個(gè)約束加強(qiáng)了java平臺的安全性。

7.欲創(chuàng)建或獲得一個(gè)類的加載器,設(shè)置或創(chuàng)建一個(gè)新

的安全管理器,停止java虛擬機(jī),改變輸入、輸出和出錯(cuò)

流。這個(gè)約束加強(qiáng)了安全性同時(shí)保留了ejb容器管理運(yùn)行環(huán)

境的能力。

8.設(shè)置socket工廠被url'sserversocket,socket

和streamhandler使用。避免這個(gè)特點(diǎn),可以加強(qiáng)安全性

同時(shí)保留了ejb容器管理運(yùn)行環(huán)境的能力。

9.使用任何方法啟動(dòng)、停止和管理線程。這個(gè)約束消

除了與ejb容器管理死鎖、線程

和并發(fā)問題的責(zé)任相沖突的可能性。

通過限制使用10-16幾個(gè)特點(diǎn),你的目標(biāo)是堵上一

個(gè)潛在的安全漏洞:

10.直接讀寫文件描述符。

11.為一段特定的代碼獲得安全策略信息。

12.加載原始的類庫。

13.訪問java一般角色所不能訪問的包和類。

14.在包中定義一個(gè)類。

15.訪問或修改安全配置對象。

16.使用java序列化特點(diǎn)中的細(xì)分類和對象替代。

17.傳遞this引用指針作為一個(gè)參數(shù)或者作為返回值

返回this引用指針。你必須使用

sessioncontext或entitycontext中的

getejbobject的結(jié)果。

java2平臺的安全策略

以上所列的特點(diǎn)事實(shí)上正是java編程語言和java2

標(biāo)準(zhǔn)版中的標(biāo)準(zhǔn)的、強(qiáng)有力的特色。ejb容器允許從j2se中

使用一些或全部的受限制的特色,盡管對于ejb組件是不可

用的,但需通過j2se的安全機(jī)制來使用而不是通過直接使

用J2se的apio

java2平臺為規(guī)范中的ejb容器所制定的安全策略定

義了安全許可集,這些許可在ejb組件的編程限制中出現(xiàn)。

通過這個(gè)策略,定義了一些許可諸如:,…,以便加強(qiáng)先前所

列出的編程限制。

許多ejb容器沒有加強(qiáng)這些限制,他們希望ejb組件

開發(fā)者能遵守這些編程限制或者是帶有冒險(xiǎn)想法違背了這

些限制。違背這些限制的ejb組件,比標(biāo)準(zhǔn)方法依賴過多或

過少的安全許可,都將很少能在多個(gè)ejb容器間移植。另外,

代碼中都將隱藏著一些不確定的、難以預(yù)測的問題。所有這

些都足以使ejb組件開發(fā)者應(yīng)該知道這些編程限制,同時(shí)也

應(yīng)該認(rèn)真地遵守它們。

任何違背了這些編程限制的ejb組件的實(shí)現(xiàn)代碼在編

譯時(shí)都不能檢查出來,因?yàn)檫@些特點(diǎn)都是java語言和j2se

中不可缺少的部分。

對于ejb組件的這些限制同樣適用于ejb組件所使用

的幫助/訪問類,j2ee應(yīng)用程序使用java文檔文件格式打包

到一個(gè)帶.ear擴(kuò)展名的文件中,這個(gè)ear文件對于發(fā)送給文

件部署器來說是標(biāo)準(zhǔn)的格式。ear文件中包括在一個(gè)或多個(gè)

ejb—jar文件中的ejb組件,還可能有ejb—jar所依賴的

庫文件。所有ear文件中的代碼都是經(jīng)過深思熟慮開發(fā)的應(yīng)

用程序并且都遵守編程限制和訪問許可集。

未來版本的規(guī)范可能會指定通過部署工具來定制安

全許可的能力,通過這種方法指定了一個(gè)合法的組件應(yīng)授予

的許可權(quán)限,也指定了一個(gè)標(biāo)準(zhǔn)方法的需求:如從文件系統(tǒng)

中讀文件應(yīng)有哪些要求。一些ejb容器/服務(wù)器目前在它們

的部署工具中都提供了比標(biāo)準(zhǔn)權(quán)限或多或少的許可權(quán)限,這

些并不是規(guī)范中所需要的。

理解這些約束

ejb容器是ejb組件生存和執(zhí)行的運(yùn)行期環(huán)境,ejb

容器為ejb組件實(shí)例提供了一些服務(wù)如:事務(wù)管理、安全持

久化、資源訪問、客戶端連接。ejb容器也負(fù)責(zé)ejb組件實(shí)

例整個(gè)生命期的管理、擴(kuò)展問題以及并發(fā)處理。所以,ejb

組件就這樣寄居在一個(gè)被管理的執(zhí)行環(huán)境中一一即ejb容

器。

因?yàn)閑jb容器完全負(fù)責(zé)ejb組件的生命期、并發(fā)處理、

資源訪問、安全等等,所以與容器本身的鎖定和并發(fā)管理相

沖突的可能性就需要消除,許多限制都需要使用來填上潛在

的安全漏洞。除了與ejb容器責(zé)任與安全沖突的問題,ejb

組件還意味著僅僅聚焦于商務(wù)邏輯,它依賴于ejb容器所提

供的服務(wù)而不是自己來直接解決底層的系統(tǒng)層的問題。

可能的問題

通常,ejb組件在容器之間的移植不可避免地與如下

問題相關(guān):

1.它需要依靠的受限制的特點(diǎn)在特定ejb容器中沒有

得到加強(qiáng)。

2.它需要依靠的非標(biāo)準(zhǔn)的服務(wù)從容器中可獲得。

為了保證ejb組件的可移植性和一致的行為,你應(yīng)該

使用一個(gè)具有與java2平臺安全

策略集相一致的策略集的容器來測試ejb組件,并且

其加強(qiáng)了前述的編程限制。

總結(jié)

ejb組件開發(fā)者應(yīng)該知道這些推薦的關(guān)于ejb組件的

編程限制,明白它們的重要性,并且從組件的穩(wěn)定性和可移

植性利益方面考慮來遵循它們。因?yàn)檫@些編程限制能阻止你

使用標(biāo)準(zhǔn)的java語言的特點(diǎn),違背了這些編程限制在編譯

時(shí)不會知道,并且加強(qiáng)這些限制也不是ejb容器的責(zé)任。所

有這些原因都使你應(yīng)很小心地遵守這些編程限制,這些限制

在組件的合同中已經(jīng)成為了一個(gè)條款,并且它們對于建造可

靠的、可移植的組件是非常重要的。

2.優(yōu)化ejb

entitybean為在應(yīng)用程序和設(shè)計(jì)中描述持久化商業(yè)

對象提供了一個(gè)清晰的模型。在java對象模型中,簡單對

象通常都是以一種簡單的方式進(jìn)行處理但是,很多商業(yè)對象

所需要的事務(wù)化的持久性管理沒有得到實(shí)現(xiàn)。entitybean

將持久化機(jī)制封裝在容器提供的服務(wù)里,并且隱藏了所有的

復(fù)雜性。entitybean允許應(yīng)用程序操縱他們就像處理一個(gè)

一般的java對象應(yīng)用。除了從調(diào)用代碼中隱藏持久化的形

式和機(jī)制外,entitybean還允許ejb容器對對象的持久化

進(jìn)行優(yōu)化,保證數(shù)據(jù)存儲具有開放性,靈活性,以及可部署

性。在一些基于ejb技術(shù)的項(xiàng)目中,廣泛的使用oo技術(shù)導(dǎo)

致了對entitybean的大量使用,sun的工程師們已經(jīng)積累

了很多使用entitybean的經(jīng)驗(yàn),這篇文章就詳細(xì)闡述的這

些卡發(fā)經(jīng)驗(yàn):

*探索各種優(yōu)化方法

*提供性能優(yōu)化和提高適用性的法則和建議

*討論如何避免一些教訓(xùn)。

法則1:只要可以,盡量使用cmp

cmp方式不僅減少了編碼的工作量,而且在container

中以及container產(chǎn)生的數(shù)據(jù)庫訪問代碼中包括了許多優(yōu)化

的可能。container可以訪問內(nèi)存緩沖中的bean,這就允許

它可以監(jiān)視緩沖中的任何變化。這樣的話就在事物沒有提交

之前,如果緩存的數(shù)據(jù)沒有變化就不用寫到數(shù)據(jù)庫中。就可

以避免許多不必要的數(shù)據(jù)庫寫操作。另外一個(gè)優(yōu)化是在調(diào)用

find方法的時(shí)候。通常情況下find方法需要進(jìn)行以下數(shù)據(jù)

庫操作:

查找數(shù)據(jù)庫中的紀(jì)錄并且獲得主鍵

將紀(jì)錄數(shù)據(jù)裝入緩存

cmp允許將這兩步操作優(yōu)化為一步就可以搞定。[具體

怎么做我也沒弄明白,原文沒有具體闡述]

法則2:寫代碼時(shí)盡量保證對bmp和cmp都支持

許多情況下,ejb的開發(fā)者可能無法控制他們寫的

bean怎么樣被部署,以及使用的container是不是支持cmp.

一個(gè)有效的解決方案是,將商業(yè)邏輯的編碼完全和持

久化機(jī)制分離。再cmp類中實(shí)現(xiàn)商業(yè)邏輯,然后再編寫一個(gè)

bmp類,用該類繼承cmp類。這樣的話,所有的商業(yè)邏輯都

在cmp類中,而持久化機(jī)制在bmp中實(shí)現(xiàn)。[我覺得這種情

況在實(shí)際工作中很少遇到,但是作者解決問題的思路值得學(xué)

習(xí)]

法則3:把ejbstore中的數(shù)據(jù)庫訪問減小到最少。

如果使用bmp,設(shè)置一個(gè)緩存數(shù)據(jù)改變標(biāo)志dirty非常

有用。所有改變數(shù)據(jù)庫中底層數(shù)據(jù)的操作,都要設(shè)置dirty,

而在ejbstore中,首先檢測dirty的值,如果dirty的值

沒有改變,表明目前數(shù)據(jù)庫中的數(shù)據(jù)與緩存的一致,就不必

進(jìn)行數(shù)據(jù)庫操作了,反之,就要把緩存數(shù)據(jù)寫入數(shù)據(jù)庫。

法則4:總是將從lookup和find中獲得的引用進(jìn)行

緩存。

引用緩存對sessionbean和entitybean都是適用

的。

通過jndilookup獲得ejb資源。比如

datasource,bean的引用等等都要付出相當(dāng)大的代價(jià)。因此

應(yīng)該避免多余的lookup.可以這樣做:

將這些引用定義為實(shí)例變量。

從setentitycontext方法查找他們。

setentitycontext方法對于一個(gè)bean實(shí)例只執(zhí)行一次,所

有的相關(guān)引用都在這一次中進(jìn)行查找,這樣查找的代價(jià)就不

是那么昂貴了。應(yīng)該避免在其他方法中查找引用。尤其是訪

問數(shù)據(jù)庫的方法:ejbload和ejbstore,如果在這些頻繁調(diào)

用的方法中進(jìn)行datasource的查找,勢必造成時(shí)間的浪費(fèi)。

調(diào)用其他entitybean的finder方法也是一種重量

級的調(diào)用。多次調(diào)用finder方法的代價(jià)非常高。如果這種

引用不適合放在setentitycontext這樣的初始化時(shí)執(zhí)行的

方法中執(zhí)行,就應(yīng)該在適當(dāng)?shù)臅r(shí)候緩存finder的執(zhí)行結(jié)果。

只是要注意的是,如果這個(gè)引用只對當(dāng)前的entity有效,

你就需要在bean從緩沖池中取出來代表另外一個(gè)實(shí)體時(shí)清

除掉這些引用。,這些操作應(yīng)該在ejbactivate中進(jìn)行。

法則5:總是使用preparestatements

這條優(yōu)化法則適用于所有訪問關(guān)系數(shù)據(jù)庫的操作。

數(shù)據(jù)庫在處理每一個(gè)sqlstatement的時(shí)候,執(zhí)行前

都要對statement進(jìn)行編譯。一些數(shù)據(jù)庫具有緩存statement

和statement的編譯后形式的功能。數(shù)據(jù)庫可以把新的

statement和緩存中的進(jìn)行匹配。然而,如果要使用這一優(yōu)

化特性,新的statement要必須和緩存中的statement完全

匹配。

對于non-preparedstatement,數(shù)據(jù)和statement本

身作為一個(gè)字符串傳遞,這樣由于前后調(diào)用的數(shù)據(jù)不同而不

能匹配,就導(dǎo)致無法使用這種優(yōu)化。而對于prepared

statement,數(shù)據(jù)和statement是分開傳遞給數(shù)據(jù)庫的,這樣

statement就可以和cache中已編譯的statement進(jìn)行匹配。

statement就不必每次都進(jìn)行編譯操作。從而使用該優(yōu)化屬

性。

這項(xiàng)技術(shù)在一些小型的數(shù)據(jù)庫訪問中能夠減少

statement將近90%的執(zhí)行時(shí)間。

法則6:完全關(guān)閉所有的statement

在編寫bmp的數(shù)據(jù)庫訪問代碼時(shí),記住一定要在數(shù)據(jù)

庫訪問調(diào)用之后關(guān)閉statement,因?yàn)槊總€(gè)打開的statement

對應(yīng)于數(shù)據(jù)庫中的一個(gè)打開的游標(biāo)。

security

1.加密

對稱加密

分組密碼

流密碼

常用的對稱加密算法:

des和tripledes

blowfish

rc4

aes

非對稱加密

常用的非對稱加密算法

rsa

elgamal

會話密鑰加密

常用的會話密鑰加密協(xié)議

s/mime

PgP

ssl和tlsssl是在applicationlevelprotocal和

transportprotocal之間的。

比如:http和tcp/ip之間

ssl提供了服務(wù)器端認(rèn)證和可選的客戶端認(rèn)證,保密

性和數(shù)據(jù)完整性。

提供基于ssl方式的傳輸加密和認(rèn)證,確保以下三種

安全防護(hù):

數(shù)據(jù)的機(jī)密性和準(zhǔn)確性、

服務(wù)器端認(rèn)證

客戶端認(rèn)證。

客戶端認(rèn)證比服務(wù)器端認(rèn)證不很普遍的原因是每一

個(gè)要被認(rèn)證的客戶都必須有一張verisign這樣的ca簽發(fā)的

證書。

通常,在進(jìn)行身份認(rèn)證的時(shí)候,應(yīng)當(dāng)只接受一個(gè)ca,

這個(gè)ca的名字包含在客戶證書中。

由于不可能隨意創(chuàng)建一個(gè)由指定ca簽發(fā)的證書,所

以這可以有效的防御通過偽造證書來進(jìn)行的攻擊嘗試。

2.認(rèn)證

認(rèn)證就是確定一條消息或一個(gè)用戶的可靠性的過程。

1.消息摘要

md5

sha和sha-1

2.消息認(rèn)證碼

3.數(shù)字簽名

用戶可以用自己的密鑰對信息加以處理,由于密鑰僅

為本人所有,這樣就產(chǎn)生了別人無法生成的文件,也就形成

了數(shù)字簽名

數(shù)字簽名可以

1)保證數(shù)據(jù)的完整性

2)驗(yàn)證用戶的身份

數(shù)字簽名采用一個(gè)人的私鑰計(jì)算出來,然后用公鑰去

檢驗(yàn)。

hash算法私鑰加密

原報(bào)文>;報(bào)文摘要>;數(shù)

字簽名

原報(bào)文和數(shù)字簽名一起被發(fā)送到接受者那里,接受者

用同樣的hash算法得到報(bào)文摘要,然后用發(fā)送者的公鑰解

開數(shù)字簽名。

比較是否相同,則可以確定報(bào)文確定來自發(fā)送者。

驗(yàn)證數(shù)字簽名必須使用公鑰,但是,除非你是通過安

全的方式直接得到,否則不能保證公鑰的正確性。

一個(gè)接受者在使用公鑰檢查數(shù)字簽名的可信度時(shí),通

常先要檢查收到的公鑰是否可信的。

因此發(fā)送方不是單單地發(fā)送公鑰,而是發(fā)送一個(gè)包含

公鑰的數(shù)字證書。

4.數(shù)字證書

數(shù)字證書是一個(gè)經(jīng)證書授權(quán)中心數(shù)字簽名的包含公

開密鑰所有者信息以及公開密鑰的文件。

數(shù)字證書cetificate中包括:

i.用戶的公鑰

ii.用戶的一些信息,如姓名,email

iii.發(fā)行機(jī)構(gòu)的數(shù)字簽名,用于保證證書的可信度

iv.發(fā)行機(jī)構(gòu)的一些信息

數(shù)字證書的格式遵循國際標(biāo)準(zhǔn)。

注意:一個(gè)數(shù)字證書certificate并不適用于多種

browser,甚至一種browser的多個(gè)版本。

數(shù)字標(biāo)識由公用密鑰、私人密鑰和數(shù)字簽名三部分組

成。

當(dāng)在郵件中添加數(shù)字簽名時(shí),您就把數(shù)字簽名和公用

密鑰加入到郵件中。數(shù)字簽名和公用密鑰統(tǒng)稱為證書。您可

以使用outlookexpress來指定他人向您發(fā)送加密郵件時(shí)

所需使用的證書。這個(gè)證書可以不同于您的簽名證書。

收件人可以使用您的數(shù)字簽名來驗(yàn)證您的身份,并可

使用公用密鑰給您發(fā)送加密郵件,這些郵件必須用您的私人

密鑰才能閱讀。

要發(fā)送加密郵件,您的通訊簿必須包含收件人的數(shù)字

標(biāo)識。這樣,您就可以使用他們的公用密鑰來加密郵件了。

當(dāng)收件人收到加密郵件后,用他們的私人密鑰來對郵件進(jìn)行

解密才能閱讀。

在能夠發(fā)送帶有數(shù)字簽名的郵件之前,您必須獲得數(shù)

字標(biāo)識。如果您正在發(fā)送加密郵件,您的通訊簿中必須包含

每位收件人的數(shù)字標(biāo)識。

數(shù)字證書,可以是個(gè)人證書或web站點(diǎn)證書,用于

將身份與“公開密鑰“關(guān)聯(lián)。只有證書的所有者才知道允許

所有者“解密“或進(jìn)行“數(shù)字簽名”的相應(yīng)“私人密鑰”。

當(dāng)您將自己的證書發(fā)送給其他人時(shí),實(shí)際上發(fā)給他們的是您

的公開密鑰,這樣他們就可以向您發(fā)送只能由您使用私人密

鑰解密和讀取的加密信息。

通過瀏覽器使用數(shù)字證書,必須先要設(shè)置瀏覽器軟件

internetexplorer或netscape使用此證書,才能開始發(fā)

送加密或需要數(shù)字簽名的信息。訪問安全的web站點(diǎn)時(shí),

該站點(diǎn)將自動(dòng)向您發(fā)送他們的web站點(diǎn)證書。

3.ca

ca機(jī)構(gòu),又稱為證書授證中心,作為電子商務(wù)交易中

受信任的第三方,承擔(dān)公鑰體系中公鑰的合法性檢驗(yàn)的責(zé)

任。ca中心為每個(gè)使用公開密鑰的用戶發(fā)放一個(gè)數(shù)字證書,

數(shù)字證書的作用是證明證書中列出的用戶合法擁有證書中

列出的公開密鑰。ca機(jī)構(gòu)的數(shù)字簽名使得攻擊者不能偽造和

篡改證書。在set交易中,ca不僅對持卡人、商戶發(fā)放證書,

還要對獲款的銀行、網(wǎng)關(guān)發(fā)放證書。它負(fù)責(zé)產(chǎn)生、分配并管

理所有參與網(wǎng)上交易的個(gè)體所需的數(shù)字證書,因此是安全電

子交易的核心環(huán)節(jié)。

對證書的信任基于對根證書的信任.例如在申請

sheca的個(gè)人數(shù)字證書前,需要先下載根證書,然后再進(jìn)行

各類證書的申請。

下載根證書的目的:

網(wǎng)絡(luò)服務(wù)器驗(yàn)證;安全電子郵件

申請個(gè)人數(shù)字證書可以為internet用戶提供發(fā)送電

子郵件的安全和訪問需要安全連接的站點(diǎn)。

1)個(gè)人數(shù)字證書

a.個(gè)人身份證書

個(gè)人身份證書是用來表明和驗(yàn)證個(gè)人在網(wǎng)絡(luò)上的身

份的證書,它確保了網(wǎng)上交易和作業(yè)的安全性和可靠性。可

應(yīng)用于:網(wǎng)上炒股、網(wǎng)上理財(cái)、網(wǎng)上保險(xiǎn)、網(wǎng)上繳費(fèi)、網(wǎng)上

購物、網(wǎng)上辦公等等。個(gè)人身份證書可以存儲在軟盤或ic

卡中。

b.個(gè)人安全電子郵件證書

個(gè)人安全電子郵件證書可以確保郵件的真實(shí)性和保

密性。申請后一般是安裝在用戶的瀏覽器里。用戶可以利用

它來發(fā)送簽名或加密的電子郵件。

用戶在申請安裝完安全安全電子郵件數(shù)字證書后,就

可以對要發(fā)送的郵件進(jìn)行數(shù)字簽名。收信人收到該郵件后,

就可以看到數(shù)字簽名的標(biāo)記,這樣就可以證明郵件肯定來自

發(fā)信者本人,而不是別人盜用該帳號偽造信件,同時(shí)也保證

該郵件在傳送過程中沒被他人篡改過任何數(shù)據(jù)。

安全電子郵件中使用的數(shù)字證書可以實(shí)現(xiàn):

保密性通過使用收件人的數(shù)字證書對電子郵件加密。

如此以來,只有收件人才能閱讀加密的郵件,在internet

上傳遞的電子郵件信息不會被人竊取,即使發(fā)錯(cuò)郵件,收件

人也無法看到郵件內(nèi)容。

認(rèn)證身份在internet上傳遞電子郵件的雙方互相不

能見面,所以必須有方法確定對方的身份。利用發(fā)件人數(shù)字

證書在傳送前對電子郵件進(jìn)行數(shù)字簽名即可確定發(fā)件人身

份,而不是他人冒充的。

完整性利用發(fā)件人數(shù)字證書在傳送前對電子郵件進(jìn)

行數(shù)字簽名不僅可確定發(fā)件人身份,而且傳遞的電子郵件信

息也不能被人在傳輸過程中修改。

不可否認(rèn)性由于發(fā)件人的數(shù)字證書只有發(fā)件人唯一

擁有,故發(fā)件人利用其數(shù)字證書在傳送前對電子郵件進(jìn)行數(shù)

字簽名,發(fā)件人就無法否認(rèn)發(fā)過這個(gè)電子郵件。

outlookexpress中的個(gè)人安全電子郵件證書

簽名郵件帶有簽名郵件圖標(biāo)。

簽名郵件可能出現(xiàn)的任何問題都將在本信息之后可

能出現(xiàn)的“安全警告”中得到描述。如果存在問題,您應(yīng)該

認(rèn)為郵件已被篡改,或并非來自所謂的發(fā)件人。

當(dāng)收到一封加密郵件時(shí),您應(yīng)該可以自信地認(rèn)為郵件

未被任何第三者讀過。outlookexpress會自動(dòng)對電子郵件

解密,如果在您的計(jì)算機(jī)上裝有正確的數(shù)字標(biāo)識。

2)企業(yè)數(shù)字證書

a.企業(yè)身份證書

企業(yè)身份證書是用來表明和驗(yàn)證企業(yè)用戶在網(wǎng)絡(luò)上

身份的證書,它確保了企業(yè)網(wǎng)上交易和作業(yè)的安全性和可靠

性。可應(yīng)用于:網(wǎng)上證券、網(wǎng)上辦公、網(wǎng)上交稅、網(wǎng)上采購、

網(wǎng)上資金轉(zhuǎn)帳、網(wǎng)上銀行等。企業(yè)身份證書可以存儲在軟盤

和ic卡中。

b.企業(yè)安全電子郵件證書

企業(yè)安全電子郵件證書可以確保郵件的真實(shí)性和保

密性。申請后一般是安裝在用戶的瀏覽器里。企業(yè)可以利用

它來發(fā)送簽名或加密的電子郵件。

可使用windowsxx中的證書服務(wù)來創(chuàng)建證書頒發(fā)機(jī)

構(gòu),它負(fù)責(zé)接收證書申請、驗(yàn)證申請中的信息和申請者的

身份、頒發(fā)證書、吊銷證書以及發(fā)布證書吊銷列表。

通常,當(dāng)用戶發(fā)出證書申請時(shí),在其計(jì)算機(jī)上的加密

服務(wù)提供程序?yàn)橛脩羯晒€和私鑰對。用戶的公鑰隨同

必要的識別信息發(fā)送至ca。如果用戶的識別信息符合批準(zhǔn)

申請的ca標(biāo)準(zhǔn),那么ca將生成證書,該證書由客戶應(yīng)用

程序檢索并就地存儲。

4.set

安全接口層協(xié)議一一ssl,并且已經(jīng)幾乎成為了目前

WWW世界的事實(shí)標(biāo)準(zhǔn)。這一標(biāo)準(zhǔn)使用公共密鑰編碼方案來對

傳輸數(shù)據(jù)進(jìn)行加密,在雙方之間建立一個(gè)internet上的加

密通道,從而使第三方無法獲得其中的信息,其思路與目前

流行的vpn方案大致相同,目的都是要保護(hù)數(shù)據(jù)不被未經(jīng)授

權(quán)的第三方所竊聽,或即使竊聽到也不知所云。但就象vpn

一樣,ssl在認(rèn)證方面沒有任何作為,它們都需要通過另外

的手段來確認(rèn)身份和建立雙方彼此間的信任,然后再通過

ssl進(jìn)行交易。

正是由于ssl標(biāo)準(zhǔn)在認(rèn)證方面的缺憾,所以set才

有存在的必要。set規(guī)范由mastercard和visa公司于

1996年發(fā)布,專家們認(rèn)為set是保證用戶與商家在電子商

務(wù)與在線交易中免受欺騙的重要手段。傳統(tǒng)的信用卡交易者

總在擔(dān)心不誠實(shí)的店員會將自己的信用卡號碼透露給他人,

而在線交易也是如此,持卡者總在擔(dān)心服務(wù)器端的管理員會

將信用卡號碼泄露出去,或者擔(dān)心黑客會在管理員不知情的

情況下盜取信用卡號碼。事實(shí)上這些擔(dān)心都是必要的,而set

標(biāo)準(zhǔn)則可以保證用戶的信用卡號碼只傳送給信用卡公司進(jìn)

行認(rèn)證,不會被系統(tǒng)管理員看到,也不會留在交易服務(wù)器的

硬盤上給黑客以可乘之機(jī)。

5.pki

pki是一種易于管理的、集中化的網(wǎng)絡(luò)安全方案。它

可支持多種形式的數(shù)字認(rèn)證:數(shù)據(jù)加密、數(shù)字簽字、不可否

認(rèn)、身份鑒別、密鑰管理以及交叉認(rèn)證等。pki可通過一個(gè)

基于認(rèn)證的框架處理所有的數(shù)據(jù)加密和數(shù)字簽字工作。pki

標(biāo)準(zhǔn)與協(xié)議的開發(fā)迄今已有15年的歷史,目前的pki已完全

可以向企業(yè)網(wǎng)絡(luò)提供有效的安全保障。

pki是一種遵循標(biāo)準(zhǔn)的密鑰管理平臺,它能夠?yàn)樗?/p>

網(wǎng)絡(luò)應(yīng)用透明地提供采用加密和數(shù)字簽名等密碼服務(wù)所必

需的密鑰和證書管理。pki必須具有

1)ca、

2)證書庫、

3)密鑰備份及恢復(fù)系統(tǒng)、

4)證書作廢處理系統(tǒng)、

5)客戶端證書處理系統(tǒng)

等基本成分,構(gòu)建pki也將圍繞著這五大系統(tǒng)來構(gòu)建

一個(gè)pki由眾多部件組成,這些部件共同完成兩個(gè)主

要功能:

1)為數(shù)據(jù)加密

2)創(chuàng)建數(shù)字認(rèn)證。

服務(wù)器產(chǎn)品是這一系統(tǒng)的核心,這些數(shù)據(jù)庫管理著數(shù)

字認(rèn)證、公共密鑰及專用密鑰。

ca數(shù)據(jù)庫負(fù)責(zé)發(fā)布、廢除和修改數(shù)字認(rèn)證信息,它裝

有用戶的公共密鑰、證書有效期以及認(rèn)證功能。為了防止

對數(shù)據(jù)簽字的篡改,ca在把每一數(shù)字簽字發(fā)送給發(fā)出請求的

客戶機(jī)之前,需對每一個(gè)數(shù)字簽字進(jìn)行認(rèn)證。一旦數(shù)字認(rèn)證

得以創(chuàng)建,它將會被自動(dòng)存儲于目錄中,目錄為樹形結(jié)構(gòu)。

Idap協(xié)議將響應(yīng)那些要求提交所存儲的公共密鑰認(rèn)證的請

求。ca為每一用戶或服務(wù)器生成兩對獨(dú)立的公共和專用密

鑰。其中一對用于信息的加密和解密,另一對由客戶機(jī)應(yīng)用

程序使用,用于文檔或信息傳輸中數(shù)字簽字的創(chuàng)建。

大多數(shù)pki均支持證書分布,這是一個(gè)把已發(fā)布過的

或續(xù)延生命期的證書加以存儲的過程。這一過程使用了一個(gè)

公共查詢機(jī)制,目錄可自動(dòng)完成這一存儲過程。影響企業(yè)普

遍接受pki的一大障礙是不同ca之間的交叉認(rèn)證。假設(shè)有

兩家公司,每一家企業(yè)分別使用來自不同供應(yīng)商的ca,現(xiàn)在

它們希望相互托管一段時(shí)間。如果其后援?dāng)?shù)據(jù)庫支持交叉認(rèn)

證,則這兩家企業(yè)顯然可以互相托管它們的ca,因而它們所

托管的所有用戶均可由兩家企業(yè)的ca所托管。

火認(rèn)證機(jī)關(guān)

ca是證書的簽發(fā)機(jī)構(gòu),它是pki的核心。眾所周知,

構(gòu)建密碼服務(wù)系統(tǒng)的核心內(nèi)容是如何實(shí)現(xiàn)密鑰管理,公鑰體

制涉及到一對密鑰,即私鑰和公鑰,私鑰只由持有者秘密掌

握,無須在網(wǎng)上傳送,而公鑰是公開的,需要在網(wǎng)上傳送,故

公鑰體制的密鑰管理主要是公鑰的管理問題,目前較好的解

決方案是引進(jìn)證書機(jī)制。

證書是公開密鑰體制的一種密鑰管理媒介。它是一種

權(quán)威性的電子文檔,形同網(wǎng)絡(luò)計(jì)算環(huán)境中的一種身份證,用

于證明某一主體的身份以及其公開密鑰的合法性。在使用公

鑰體制的網(wǎng)絡(luò)環(huán)境中,必須向公鑰的使用者證明公鑰的真

實(shí)合法性。因此,在公鑰體制環(huán)境中,必須有一個(gè)可信的機(jī)構(gòu)

來對任何一個(gè)主體的公鑰進(jìn)行公證,證明主體的身份以及他

與公鑰的匹配關(guān)系。ca正是這樣的機(jī)構(gòu),它的職責(zé)歸納起來

有:

1、驗(yàn)證并標(biāo)識證書申請者的身份;

2、確保ca用于簽名證書的非對稱密鑰的質(zhì)量;

3、確保整個(gè)簽證過程的安全性,確保簽名私鑰的安全

性;

4、證書材料信息的管理;

5、確定并檢查證書的有效期限;

6、確保證書主體標(biāo)識的唯一性,防止重名;

7、發(fā)布并維護(hù)作廢證書表;

8、對整個(gè)證書簽發(fā)過程做日志記錄;

9、向申請人發(fā)通知。

其中最為重要的是ca自己的一對密鑰的管理,它必

須確保其高度的機(jī)密性,防止他方偽造證書。ca的公鑰在網(wǎng)

上公開,整個(gè)網(wǎng)絡(luò)系統(tǒng)必須保證完整性。

火證書庫

證書庫是證書的集中存放地,它與網(wǎng)上“白頁”類似,

是網(wǎng)上的一種公共信息庫,用戶可以從此處獲得其他用戶的

證書和公鑰。

構(gòu)造證書庫的最佳方法是采用支持Idap協(xié)議的目錄

系統(tǒng),用戶或相關(guān)的應(yīng)用通過Idap來訪問證書庫。系統(tǒng)必須

確保證書庫的完整性,防止偽造、篡改證書。

*密鑰備份及恢復(fù)系統(tǒng)

*證書作廢處理系統(tǒng)

*pki應(yīng)用接口系統(tǒng)

pki的價(jià)值在于使用戶能夠方便地使用加密、數(shù)字簽

名等安全服務(wù),因此一個(gè)完整的pki必須提供良好的應(yīng)用接

口系統(tǒng),使得各種各樣的應(yīng)用能夠以安全、一致、可信的方

式與pki交互,確保所建立起來的網(wǎng)絡(luò)環(huán)境的可信性,同

時(shí)降低管理維護(hù)成本。最后,pki應(yīng)用接口系統(tǒng)應(yīng)該是跨平

臺的。

許多權(quán)威的認(rèn)證方案供應(yīng)商目前都在提供外包的

pki。外包pki最大的問題是,用戶必須把企業(yè)托管給某一服

務(wù)提供商,即讓出對網(wǎng)絡(luò)安全的控制權(quán)。如果不愿這樣做,

則可建造一個(gè)專用的pki。專用方案通常需把來自entrust、

baltimoretechnologies以及xcert的多種服務(wù)器產(chǎn)品與來

自主流應(yīng)用程序供應(yīng)商的產(chǎn)品組合在一起。專用pki還要

求企業(yè)在準(zhǔn)備其基礎(chǔ)設(shè)施的過程中投入大量的財(cái)力與物力。

7.jaas

擴(kuò)展jaas實(shí)現(xiàn)類實(shí)例級授權(quán)

“java認(rèn)證和授權(quán)服務(wù)”

在jaas下,可以給予用戶或服務(wù)特定的許可權(quán)來執(zhí)

行java類中的代碼。在本文中,軟件工程師carlos

fonseca向您展示如何為企業(yè)擴(kuò)展jaas框架。向jaas框

架添加類實(shí)例級授權(quán)和特定關(guān)系使您能夠構(gòu)建更動(dòng)態(tài)、更靈

活并且伸縮性更好的企業(yè)應(yīng)用程序。

大多數(shù)java應(yīng)用程序都需要某種類實(shí)例級的訪問

控制。例如,基于web的、自我服務(wù)的拍賣應(yīng)用程序的規(guī)

范可能有下列要求:

publicstaticobject

doas

throws

注意,用來保護(hù)敏感代碼的方法與"java2代碼源

訪問控制”概述中描述的方法相同。請參閱參考資料部分以

了解更多關(guān)于jaas中代碼源訪問控制和認(rèn)證的信息。

jaas中的授權(quán)

清單4顯示一個(gè)授權(quán)請求的結(jié)果,該請求使用清單

3中顯示的jaas策略文件。假設(shè)已經(jīng)安裝了

securitymanager,并且logincontext已經(jīng)認(rèn)證了一個(gè)帶

有名為“admin”的主體的subjecto

清單4.一個(gè)簡單的授權(quán)請求

publicclassjaasexample{

publicstaticvoidmain(

//whereauthenticateduserisasubjectwith

//aprincipalexamplenamedadmin.

);

publicclassjaasexampleactionimplements

privilegedaction{

publicobjectrun{

filewriterfw=newfilewriter;

這里,敏感代碼被封裝在jaasexampleaction類中。

還要注意,調(diào)用類不要求為jaasexampleaction類代碼源

授予許可權(quán),因?yàn)樗鼘?shí)現(xiàn)了一個(gè)privilegedactiono

擴(kuò)展jaas

大多數(shù)應(yīng)用程序都有定制邏輯,它授權(quán)用戶不僅僅在

類上執(zhí)行操作,而且還在該類的實(shí)例上執(zhí)行操作。這種授權(quán)

通常建立在用戶和實(shí)例之間的關(guān)系上。這是jaas的一個(gè)小

缺點(diǎn)。然而,幸運(yùn)的是,這樣設(shè)計(jì)jaas使得jaas可以擴(kuò)

展。只要做一點(diǎn)工作,我們將可以擴(kuò)展jaas,使其包含一

個(gè)通用的、類實(shí)例級的授權(quán)框架。

在文章開頭處我已經(jīng)說明了,抽象類被用于代表

jaas安全性策略。它的缺省實(shí)現(xiàn)是由類提供。policyfile

類從jaas格式的文件中讀取策略。

我們需要向這個(gè)文件添加一個(gè)東西為類實(shí)例級授權(quán)

擴(kuò)展策略定義:一個(gè)與許可權(quán)語句相關(guān)的可選關(guān)系參數(shù)。

缺省jaas許可權(quán)語句的格式如下:

permission;[name],[actions];

我們在這個(gè)許可權(quán)語句的末尾添加一個(gè)可選的關(guān)系

參數(shù)來完成策略定義。下面是新許可權(quán)語句的格式:

permission;

[name],[actions],[relationship];

在為類實(shí)例級授權(quán)擴(kuò)展jaas時(shí)要注意的最重要的

一點(diǎn)是:許可權(quán)實(shí)現(xiàn)類必須有一個(gè)帶三個(gè)參數(shù)的構(gòu)造函數(shù)。

第一個(gè)參數(shù)是名稱參數(shù),第二個(gè)是行為參數(shù),最后一個(gè)是關(guān)

系參數(shù)。

解析新文件格式

既然文件格式已經(jīng)改變,就需要一個(gè)新的子類來解

析文件。

為簡單起見,我們的示例使用了一個(gè)新的子類,

來從xml文件讀取策略。在實(shí)際的企業(yè)應(yīng)用程序中,關(guān)系

數(shù)據(jù)庫更適合執(zhí)行這個(gè)任務(wù)。

使用xmlpolicyfile類代替缺省的jaas訪問控制

策略實(shí)現(xiàn)的最容易的方法是向?qū)傩晕募砑佣l目。屬

性文件位于java2平臺運(yùn)行時(shí)的lib/security目錄下。

清單5是與xmlpolicyfile類一起使用的樣本xml策略

文件:

清單5.一個(gè)xml策略文件

“"name="users”>;

“a

name="”

actions:”create”/>;

name=

actions:"read"/>;

aa

name="”

actions:”write”

relationships“owner”/>;

aa

name=”"

actions:”create”/>;

a“

name=““

actions:“read”/>;

aa

name二"“

actions=“write”

relationships“owner”/>;

“a

name="”

actions="accept”

relationships“actionowner”/>;

在這個(gè)示例策略文件中,任何與名為

principalexample的用戶有關(guān)的用戶都可以創(chuàng)建并讀取一

個(gè)實(shí)例。但是,只有創(chuàng)建該實(shí)例的用戶才可以更新它。這

是第三個(gè)permission元素定義的,該元素包含值為owner

的relationship屬性。實(shí)例也是一樣,除了相應(yīng)實(shí)例

的所有者可以更改投標(biāo)接受標(biāo)志。

resource接口

要求類實(shí)例級訪問控制的類必須實(shí)現(xiàn)resource接

口。該接口的getowner方法返回類實(shí)例的所有者。

fulfills方法被用于處理特定關(guān)系。另外,這些類使用類

保護(hù)敏感代碼。例如,auction類擁有下列構(gòu)造函數(shù):

publicauction{

permissionpermission=

newresourcepermission;

}

所有者關(guān)系

resourcepermission類的implies方法是這個(gè)框

架的關(guān)鍵。implies方法就等同性比較名稱和行為屬性。如

果定義了一個(gè)關(guān)系,那么必須把受保護(hù)的類實(shí)例傳遞到

resourcepermission構(gòu)造函數(shù)中。resourcepermission類

理解所有者關(guān)系。它將類實(shí)例的所有者與執(zhí)行代碼的

subject進(jìn)行比較。特定關(guān)系被委托給受保護(hù)類的fulfills

方法。

例如,在清單5中所示的xml策略文件中,只有

auction類實(shí)例的所有者可以更新文件。該類的setter方

法使用清單6中顯示的保護(hù)代碼:

清單6.運(yùn)行中的implies方法

publicvoidsetname(

permissionpermission=

newresourcepermission;

9

//sensitivecode

=newname;

}

被傳遞到resourcepermission構(gòu)造函數(shù)中的this

引用代表auction類實(shí)現(xiàn)的resource接口。由于策略文

件中列出的關(guān)系是owner,所以resourcepermission類使

用這個(gè)引用檢查當(dāng)前subject是否擁有與實(shí)例所有者相匹

配的主體。如果指定了另一個(gè)關(guān)系,那么

resourcepermission類調(diào)用auction類的fulfills方

法。由resource實(shí)現(xiàn)類提供fulfills方法中的邏輯。

xml策略文件中列出的bid類擁有清單7中所示

的方法。

清單7.處理特定關(guān)系

publicvoidsetaccepted{

permissionpermission二

newresourcepermission;

//sensitivecode

二flag;

}

publicbooleanfulfills{

if){

stringauctionowner=;

iteratorprincipaliterator=;

while){

principalprincipal=;

)

returntrue;

returnfalse;

傳遞到fulfills方法中的關(guān)系字符串是策略文件

中列出的關(guān)系。在這個(gè)案例中,我們使用了

"auctionowner”字符串。

缺省情況下,xmlpolicyfile類在當(dāng)前工作目錄中查

找名為的文件。系統(tǒng)屬性可以用于指定另一個(gè)不同的文

件名和位置。

websphereapplicationserver示例

除命令行示例之外,您可能還想運(yùn)行這個(gè)簡單的程

序,該程序?yàn)榱薸bmwebsphereapplicationserver,

version而被優(yōu)化。

一個(gè)可運(yùn)行的示例

綜合這些信息,我們將運(yùn)行一個(gè)簡單的命令行示例。

該示例程序包含三個(gè)jar文件:

文件包含允許實(shí)例級訪問控制的jaas擴(kuò)展框架。

它還包含一個(gè)loginmoduleexample類,這個(gè)類從xml文

件讀取用戶認(rèn)證信息。用戶標(biāo)識和密碼存儲在文件中。用

戶組存儲在文件中。關(guān)于loginmoduleexample的更多信

息,請參閱參考資料部分。

該示例包含四個(gè)附加的文件:

policy

在試圖運(yùn)行這個(gè)示例程序之前,請確保更新了、

policy和文件中的路徑。缺省情況下,所有的密碼都是

“passwOrd”。

示例如何工作

該示例程序提示輸入用戶標(biāo)識和密碼。它用文件中

的條目核對所提供的用戶標(biāo)識和密碼。在認(rèn)證了用戶之后,

程序設(shè)法創(chuàng)建一個(gè)userprofile類實(shí)例,修改它并從中讀

取。缺省情況下,userprofile類的所有者是jane。當(dāng)jane

登錄時(shí),三個(gè)操作全部成功。當(dāng)john登錄時(shí),只有創(chuàng)建操

作成功。當(dāng)jane的經(jīng)理lou登錄時(shí),只有第一個(gè)和最后一

個(gè)操作成功。當(dāng)系統(tǒng)管理員登錄時(shí),操作全部成功。當(dāng)然,

只有當(dāng)提供的文件未被修改時(shí),上述這些才都是真的。

示例安裝

下面的安裝指導(dǎo)假設(shè)您正在使用jdk并且已經(jīng)把

文件解壓縮到d:\jaasexample目錄。通過將文件解壓縮到

這個(gè)目錄,您可以省去一些工作;否則您就必須使用正確的

路徑名修改policy和策略文件。

下面是運(yùn)行該示例需要做的工作:

下載這個(gè)示例的源文件。

把和復(fù)制到j(luò)dkjre\lib\ext目錄。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論