<kbd id="44f3z"></kbd>

<style id="44f3z"><thead id="44f3z"></thead></style>
    <option id="44f3z"></option>
      <em id="44f3z"><dfn id="44f3z"></dfn></em>
    1. <menuitem id="44f3z"><thead id="44f3z"><i id="44f3z"></i></thead></menuitem>
      <u id="44f3z"><input id="44f3z"></input></u>
      日日碰狠狠躁久久躁综合小说 ,艳妇臀荡乳欲伦交换h在线观看,亚洲熟妇无码另类久久久,国产精品极品美女自在线观看免费 ,亚洲 a v无 码免 费 成 人 a v,国产日韩精品欧美一区喷水,白嫩少妇激情无码,五月丁香六月综合缴情在线
      首頁 > 范文大全 > 心得體會 > 讀書心得體會 > java讀書心得(通用5篇)

      java讀書心得

      發(fā)布時間:2022-12-12

      java讀書心得(通用5篇)

      java讀書心得 篇1

        首選很感謝Joshua Bloch寫的這本書,當(dāng)然更感謝我們的司令翻譯。至少目前我看到的100頁的內(nèi)容,基本沒發(fā)現(xiàn)翻譯很別扭的地方,包括錯別字也沒有發(fā)現(xiàn),至少沒有影響到我對書中內(nèi)容的理解。再次感謝。

        在后面的讀書心得里,我會根據(jù)我的個人理解,將書中的各個知識點逐個和大家分享。 書中的一些觀點我也不是完全贊同的,呵呵(估計是我的水平不夠,呵呵呵)。

        我們先看全書第一個問題:考慮用靜態(tài)工廠方法代替構(gòu)造器。

        也就是,不再使用 new 這種方式來獲得一個類的實例,而是通過工廠方法獲得。

        優(yōu)點:

        1 有名字

        這個我體會還是比較深的,在JDK里,我見過一個類的最多的構(gòu)造器數(shù)量,有16個。大家可以看看 Java.math.BigDecimal 這個類就知道了。

        就算一個類的構(gòu)造器有4個左右,我想你很可能在使用的時候會極其注意,不要選錯了到底是用哪一個。

        所以,如果能提供一個很好命名的方法來實現(xiàn)構(gòu)造類,確實是一個不錯的主意,比如

        BigDecimal.getInstanceFromString(...); 我想這個名字雖然有點垃圾,但要表達(dá)的意思確實異常的明確。

        在一些第三方的庫里面,這種情況更加突出。我許多時候不得不看看API文檔,來區(qū)分我的那個int參數(shù)到底是使用三個參數(shù)的構(gòu)造器,還是使用四個參數(shù)的構(gòu)造器。因為他們太像了。

        2 可以單例

        這個就不用說了,你可以在方法里干你要做的任何事情,而new絕對會給你一個新的實例。

        3 可以返回任何子類型。

        這個對于系統(tǒng)的擴展是很有用處的。new 已經(jīng)決定了你肯定要這個類,而靜態(tài)方法卻可以修改,不一定肯定返回你方法所在的類,可以在必要時替換為一個子類。

        4 代碼簡便

        這點我體會不深,呵呵

        不過這個寫法我確實經(jīng)常用

        List list = new ArrayList;

        后面的那個ArrayList里面的 String就是一個例子吧。不過我倒是不是很在意這個,因為我很喜歡這樣寫了。

        下面這個例子看上去確實不錯。呵呵!

        [java] view plain copypublic class Test extends Thread {

        public static void main(String args) {

        Test te = Test.newInstance;

        }

        public static Test newInstance {

        return new Test;

        }

        }

      java讀書心得 篇2

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

        j2ee模式

        value object(值對象) 用于把數(shù)據(jù)從某個對象/層傳遞到其他對象/層的任意java對象。

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

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

        jsp

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

        __

        _____ | directive (指令)

        | |-- scripting (腳本)

        jsp -------| |__ action (動作)

        |

        |_____template data :除jsp語法外,jsp引擎不能解讀的東西

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

        a) page指令

        b) include指令

        c) taglib指令

        在jsp的任何地方,以任何順序,一個頁面可以包含任意數(shù)量的page指令

        2)scripting(腳本)包括三種類型

        a) ;

        b) ;

        c) ;

        3)action(動作)

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

        a) ;

        b) ;

        d) ;

        e) ;

        f) ;

        g) ;

        h) ; 日記日記300字

        1. 注釋: ;

        ;

        2. ;

        session可以不賦值,默認(rèn)為true,如果session=”false”,則在jsp頁面中,隱含的變量session就不能使用。

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

        也被稱之為jsp model 2 architecture

        這種途徑涉及到使用一個servlet或一個jsp作為一個應(yīng)用程序或一組頁面的入口點。

        為創(chuàng)建可維護的jsp系統(tǒng),request controller是最有用的方式之一。

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

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

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

        2.jsp中的javabean

        jsp三種bean的類型

        1) 頁面bean

        2) 會話bean

        3) 應(yīng)用bean

        大多數(shù)的系統(tǒng)會使用一個會話bean來保持狀態(tài),而對每一個頁面使用一個頁面bean 來對復(fù)雜的數(shù)據(jù)進行表示。

        頁面bean是一個模型,而jsp是一個視圖。

        3.custom tag

        bean是信息的攜帶者,

        而tag更適用于處理信息。

        標(biāo)記庫包含一個標(biāo)記庫描述符(tld)和用于實現(xiàn)custom tag的java類

        在翻譯階段,jsp容器將使用tld來驗證頁面中的所有的tag是否都被正確的使用。

        標(biāo)記處理程序只是一個簡單的適配器,而真正的邏輯是在另一個類中實現(xiàn)的,標(biāo)記處理程序只是提供了一個供其他的可復(fù)用的類的jsp接口

        servlet

        1.servletconfig

         一個servletconfig對象是servlet container在servlet initialization的時候傳遞給servlet的。

        servletconfig包涵 servletcontext 和 一些 name/value pair (來自于deployment descriptor)

         servletcontext接口封裝了web應(yīng)用程序的上下文概念。

        2.會話跟蹤

        1) session

         當(dāng)一個client請求多個servlets時,一個session可以被多個servlet共享。

         通常情況下,如果server detect到browser支持cookie,那么url就不會重寫。

        2) cookie

         在java servlet中,如果你光 cookie cookie = new cookie(name,value)

        那么當(dāng)用戶退出browser時,cookie會被刪除掉,而不會被存儲在客戶端的硬盤上。

        如果要存儲 cookie,需加一句 cookie.setmaxage(200)

         cookie是跟某一個server相關(guān)的,運行在同一個server上的servlet共享一個cookie.

        3) url rewriting

        在使用url rewriting來維護session id的時候,每一次http請求都需要encodeurl

        典型的用在兩個地方

        1) out.print(“form action=\” ”);

        out.print(response.encodeurl(“sessionexample”));

        out.print(“form action=\” ”);

        out.print(“method = get>;”);

        2) out.print(“

        ;

        out.print(response.encodeurl(“sessionexample?database=foo&datavalue=bar”));

        out.println(“\” >;url encoded ;”);

        3.singlethreadmodel

        默認(rèn)的,每一個servlet definition in a container只有一個servlet class的實例。

        只有實現(xiàn)了singlethreadmodel,container才會讓servlet有多個實例。

        servlet specification上建議,不要使用synchronized,而使用singlethreadmodel。

        singlethreadmodel(沒有方法)

        保證servlet在同一時刻只處理一個客戶的請求。

        singlethreadmodel是耗費資源的,特別是當(dāng)有大量的請求發(fā)送給servlet時,singlethreadmodel的作用是使包容器以同步時鐘的方式調(diào)用service方法。

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

        single thread model一般使用在需要響應(yīng)一個heavy request的時候,比如是一個需要和數(shù)據(jù)庫打交道的連接。

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

        3. the client通過發(fā)送一個blank line表示它已經(jīng)結(jié)束request

        而the server通過關(guān)閉the socket來表示response已結(jié)束了。

        4. 一個http servlet可以送三種東西給client

        1) a single status code

        2) any number of http headers

        3) a response body

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

        system.getproperties.put(“key”,”value”);

        6. post和get

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

        get: ?之后的查詢字符串要使用urlencode,經(jīng)過urlencode后,這個字符串不再帶有空格,以后將在server上恢復(fù)所帶有的空格。

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

        7. web.xml就是web applicatin 的deployment descriptor

        作用有:組織各類元素

        設(shè)置init param

        設(shè)置安全性

        8. request dispatcher用來把接收到的request forward processing到另一個servlet

        要在一個response里包含另一個servlet的output時,也要用到request dispatcher.

        9. servlet和jsp在同一個jvm中,可以通過serveltcontext的

        setattribute( )

        getattribute( )

        removeattribute( )

        來共享對象

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

        可以用 strtitle = request.getparameter(“title”);

        strtitle = new string(strtitle.getbytes(“8859-1”),”gb2312”);

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

        string encoding = response.getcharacterencoding;

        //確定application server用什么編碼來讀取輸入的。

        strtitle = new string(strtitle.getbytes(encoding),”gb2312”);

        xml

        1.xml基礎(chǔ)知識

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

        首部( header )

        內(nèi)容( content )

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

        xml文檔中的每一個元素都處在一個名字空間中;如果沒有指定的名字空間,缺省的名字空間就是和該元素相關(guān)聯(lián)的名字空間。

        3. a document that is well-formed obeys all of the rules of xml documents (nested tags, etc.)

        " if a well-formed document uses a document type definition (more on these in a minute), and it follows all the rules of the dtd, then it is also a valid document

        4. a tag is the text between the ;

        " an element is the start tag, the end tag,and everything (including other elements) in between

        5. 標(biāo)簽( tags ) 實際上包含了“元素”( elements ) 和 “屬性”( attributes )兩部分。

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

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

        如果你有一些數(shù)據(jù)要提供給某個應(yīng)用程序,該數(shù)據(jù)就可能要用到一個元素。

        如果該數(shù)據(jù)用于分類,或者用于告知應(yīng)用程序如何處理某部分?jǐn)?shù)據(jù),或者該數(shù)據(jù)從來沒有直接對客戶程序公開,那么它就可能成為一種屬性。

        6. cdata (讀作:c data ) c是character的縮寫。

        .xml.sax.reader

        /|\

        org.xm.l.sax.xmlreader

        /|\

        org.apche.xerces.parsers.saxparser

        2.webservice

        2.1 webservice的基本概念

        webservice是一種可以接收從internet或者intranet上的其它系統(tǒng)中傳遞過來的請求,輕量級的獨立的通訊技術(shù)。

        這種技術(shù)允許網(wǎng)絡(luò)上的所有系統(tǒng)進行交互。隨著技術(shù)的發(fā)展,一個web服務(wù)可以包含額外的指定功能并且可以在多個b2b應(yīng)用中協(xié)作通訊。

        web服務(wù)可以理解請求中上下文的關(guān)系,并且在每一個特定的情況下產(chǎn)生動態(tài)的結(jié)果。這些服務(wù)會根據(jù)用戶的身份,地點以及產(chǎn)生請求的原因來改變不同的處理,用以產(chǎn)生一個唯一的,定制的方案。這種協(xié)作機制對那些只對最終結(jié)果有興趣的用戶來說,是完全透明的。

        uddi

        在用戶能夠調(diào)用web服務(wù)之前,必須確定這個服務(wù)內(nèi)包含哪些商務(wù)方法,找到被調(diào)用的接口定義,還要在服務(wù)端來編制軟件。所以,我們需要一種方法來發(fā)布我們的web服務(wù)。

        uddi (universal description, discovery, and integration) 是一個主要針對web服務(wù)供應(yīng)商和使用者的新項目。uddi 項目中的成員可以通過uddi business registry (ubr) 來操作web服務(wù)的調(diào)用,ubr是一個全球性的服務(wù)。

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

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

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

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

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

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

        uddi利用soap消息機制(標(biāo)準(zhǔn)的xml/http)來發(fā)布,編輯,瀏覽以及查找注冊信息。它采用xml格式來封裝各種不同類型的數(shù)據(jù),并且發(fā)送到注冊中心或者由注冊中心來返回需要的數(shù)據(jù)。

        wsdl

        對于商業(yè)用戶來說,要找到一個自己需要使用的服務(wù),他必須知道如何來調(diào)用。

        wsdl (web services description language) 規(guī)范是一個描述接口,語義以及web服務(wù)為了響應(yīng)請求需要經(jīng)常處理的工作的xml文檔。這將使簡單地服務(wù)方便,快速地被描述和記錄。

        以下是一個wsdl的樣例:

        targetnamespace=""

        xmlns:tns="" (5)(6)(7)(8)(9)(10)(11)(12)(13)(14)(15)

        xmlns:xsd1=""

        xmlns:soap=";

        xmlns=";>;

        xmlns=";>;

        type="tns:stockquoteporttype">;

        transport=";/>;

        soapaction=""/>;

        ;my first service;

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

        消息的描述和格式定義可以通過xml文檔中的;和; 標(biāo)記來傳送。

        ; 標(biāo)記中表示了消息傳送機制。 (e.g. request-only, request-response, response-only) 。

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

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

        wsdl在uddi中總是作為一個接口描述文檔。因為uddi是一個通用的用來注冊wsdl規(guī)范的地方,uddi的規(guī)范并不限制任何類型或者格式描述文檔。這些文檔可能是一個wsdl文檔,或者是一個正規(guī)的包含導(dǎo)向文檔的web頁面,也可能只是一個包含聯(lián)系信息的電子郵件地址。

        現(xiàn)在java提供了一個 java api for wsdl (jwsdl)規(guī)范。它提供了一套能快速處理wsdl文檔的方法,并且不用直接對xml文檔進行操作,它會比jaxp更方便,更快速。

        soap

        當(dāng)商業(yè)用戶通過uddi找到你的wsdl描述文檔后,他通過可以simple object access protocol (soap) 調(diào)用你建立的web服務(wù)中的一個或多個操作。

        soap是xml文檔形式的調(diào)用商業(yè)方法的規(guī)范,它可以支持不同的底層接口,象http(s)或者smtp。

        之所以使用xml是因為它的獨立于編程語言,良好的可擴展性以及強大的工業(yè)支持。之所以使用http是因為幾乎所有的網(wǎng)絡(luò)系統(tǒng)都可以用這種協(xié)議來通信,由于它是一種簡單協(xié)議,所以可以與任何系統(tǒng)結(jié)合,還有一個原因就是它可以利用80端口來穿越過防火墻。

        soap的強大是因為它簡單。soap是一種輕量級的,非常容易理解的技術(shù),并且很容易實現(xiàn)。它有工業(yè)支持,可以從各主要的電子商務(wù)平臺供應(yīng)商那里獲得。

        從技術(shù)角度來看,soap詳細(xì)指明了如何響應(yīng)不同的請求以及如何對參數(shù)編碼。一個soap封裝了可選的頭信息和正文,并且通常使用http post方法來傳送到一個http 服務(wù)器,當(dāng)然其他方法也是可以的,例如smtp。soap同時支持消息傳送和遠(yuǎn)程過程調(diào)用。以下是一個soap請求。

        post /stockquote http/1.1

        host: www.stockquoteserver

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

        content-length: nnnn

        soapaction: "some-uri"

        xmlns:soap-env=";

        〖5〗〖6〗〖7〗〖8〗〖9〗〖10〗〖11〗〖12〗〖13〗〖14〗〖15〗

        soap-env:encodingstyle=";/>;

        ;sunw;

        jaxr

        為了支持uddi在java平臺上的功能,java apis for xml registries (jaxr)允許開發(fā)者來訪問注冊中心。

        值得注意的是,jaxr并不是建立web服務(wù)必需的,你可以利用其他常用的xml apis來直接集成這些協(xié)議。

        jaxr是一個方便的api,它提供了java api來發(fā)布,查找以及編輯那些注冊信息。它的重點在于基于xml的b2b應(yīng)用,復(fù)雜的地址本查找以及對xml消息訂閱的支持等web服務(wù)。

        它也可以用來訪問其他類型的注冊中心,象ebxml注冊中心。

        這些對web服務(wù)的注冊信息進行的操作,可以使用當(dāng)前的一些web服務(wù)工具來完成(例如第三方的soap和ebxml消息工具)。另外,當(dāng)jaxp提供了一致并具有針對性的api來完成這些操作,這將使開發(fā)變得更加容易。

        jax/rpc

        為了使開發(fā)人員專注于建立象soap那樣的基于xml的請求,jcp正在開發(fā)基于rpc (jax/rpc) 的java api。jax/rpc是用來發(fā)送和接收方法調(diào)用請求的,它基于xml協(xié)議,象soap,或者其他的象xmlp (xml protocol,要了解更多可以參考)。jax/rpc使你不用再關(guān)注這些協(xié)議的規(guī)范,使應(yīng)用的開發(fā)更快速。不久,開發(fā)人員就不用直接以xml表示方法調(diào)用了。

        目前有很多第三方實現(xiàn)了soap,開發(fā)人員可以在不同的層次上調(diào)用soap,并選擇使用哪一種。將來,jax/rpc會取代這些apis并提供一個統(tǒng)一的接口來構(gòu)造以及處理soap rpc請求。

        在接收一個從商業(yè)伙伴那里過來的soap請求的時候,一個java servlet用jax/rpc來接收這個基于xml的請求。一旦接收到請求后,servlet會調(diào)用商務(wù)方法,并且把結(jié)果回復(fù)給商業(yè)伙伴。

        jaxm

        當(dāng)從商業(yè)合作伙伴那里接收一個web服務(wù)的請求時,我們需要java api實現(xiàn)一個servlet來處理ebxml消息,就象我們用jax/rpc來處理soap請求一樣。

        java api for xml messaging (jaxm) 是集成xml消息標(biāo)準(zhǔn)(象ebxml消息或者soap消息)的規(guī)范。

        這個api是用來推動xml消息處理的,它檢測那些預(yù)定單的消息格式以及約束。它控制了所有的消息封裝機制,用一種直觀的方式分割了消息中的信息,象路由信息,發(fā)貨單。這樣,開發(fā)人員只要關(guān)注消息的有效負(fù)載,而不用去擔(dān)心那些消息的重復(fù)處理。

        目前的開發(fā)人員用jaxp來實現(xiàn)jaxm將要提供的功能,jaxm將會提供一套非常具有針對性的api來處理基于xml的消息傳送。這將大大簡化開發(fā)人員的代碼,并使它們具有統(tǒng)一的接口。

        jaxm和jax/rpc的差別在于處理消息導(dǎo)向的中間件以及遠(yuǎn)程過程調(diào)用的不同。jaxm注重于消息導(dǎo)向,而jax/rpc是用來完成遠(yuǎn)程過程調(diào)用的。以下是圖解。

        請注意,在jaxm 和 jax/rpc技術(shù)成熟之前,開發(fā)人員還是依賴于第三方的soap apis,象apache soap, idooxoap, 以及 glue。當(dāng)jaxm 和 jax/rpc正式發(fā)布后,它將為當(dāng)前不同的soap和ebxml消息提供統(tǒng)一的接口。就象jdbc位多種不同的數(shù)據(jù)庫提供統(tǒng)一的接口。

        jaxb

        xml綁定技術(shù)可以把xml文檔和java對象進行自由轉(zhuǎn)換。

        用jaxb,你可以在后臺的ejb層,把xml文檔轉(zhuǎn)換成java對象。同樣你也可以把從ejb中取出的java對象轉(zhuǎn)換成xml文檔返回給用戶。

        jaxb接口提供了比sax和dom更高級的方法來處理xml文檔。它提供的特性可以在xml數(shù)據(jù)和java類之間互相映射,提供了一個簡單的方法來轉(zhuǎn)換xml數(shù)據(jù)。它比逐個解析標(biāo)記更簡單。

        2.2 建立weservice的步驟

        在建立weservice的時候,有三個主要步驟:

        1.建立客戶端聯(lián)接

        為了允許applets,applications,商業(yè)合作伙伴,瀏覽器和pdas 使用web服務(wù)。

        2.實現(xiàn)web服務(wù)

        包括工作流,數(shù)據(jù)傳送,商業(yè)邏輯以及數(shù)據(jù)訪問。這些功能是隱藏在web服務(wù)后,并且為客戶端工作的。

        3.聯(lián)接后臺系統(tǒng)

        這個系統(tǒng)可能包括一個或多個數(shù)據(jù)庫,現(xiàn)存的企業(yè)信息系統(tǒng),商業(yè)合作伙伴自己的系統(tǒng)或者web服務(wù),以及在多個系統(tǒng)中共享的數(shù)據(jù)。

        基于j2ee的web服務(wù)的核心構(gòu)架:

        rmi

        1. rmi-iiop

        2. rmi 是在java中使用remote method invocation的最初的方法,rmi使用java.rmi包

        rmi-iiop 是rmi的一個特殊版本,rmi-iiop可以和corba兼容,rmi-iiop使用java.rmi包和javax.rmi

        jaf(java活動構(gòu)架)

        開發(fā)者可以使用jaf來決定任意一塊數(shù)據(jù)的類型、封裝對數(shù)據(jù)的訪問、尋找合適的操作、實例化相關(guān)的bean來執(zhí)行這些操作等。

        例如,javamail就是使用jaf根據(jù)mime類型來決定實例化那一個對象。

        ejb

        1. ejb組件實現(xiàn)代碼的限制

        ejb組件的約束

        ejb的開發(fā)者并不需要在ejb的組件實現(xiàn)代碼中編寫系統(tǒng)級的服務(wù),ejb提供商/開發(fā)

        者需知道并且嚴(yán)格地遵守一些限制,這些限制與開發(fā)穩(wěn)定的和可移植的ejb組件的利益有 <1><2><3><4><5><6><7><8><9><10><11><12><13><14><15>

        關(guān)。

        以下是你應(yīng)該回避使用的一些java特色,并且在你的ejb組件的實現(xiàn)代碼中要嚴(yán)格限

        制它們的使用:

        1.使用static,非final 字段。建議你在ejb組件中把所有的static字段都聲明為final型的。這樣可以保證前后一致的運行期語義,使得ejb容器有可以在多個java虛擬機之間分發(fā)組件實例的靈活性。

        2.使用線程同步原語來同步多個組件實例的運行。避免這個問題,你就可以使ejb容器靈活的在多個java虛擬機之間分發(fā)組件實例。

        3.使用awt函數(shù)完成鍵盤的輸入和顯示輸出。約束它的原因是服務(wù)器方的商業(yè)組件意味著提供商業(yè)功能而不包括用戶界面和鍵盤的i/o功能。

        4.使用文件訪問/java.io 操作。ejb商業(yè)組件意味著使用資源管理器如jdbc來存儲和檢索數(shù)據(jù)而不是使用文件系統(tǒng)api。同時,部署工具提供了在部署描述器(descriptor)中存儲環(huán)境實體,以至于ejb組件可以通過環(huán)境命名上下文用一種標(biāo)準(zhǔn)的方法進行環(huán)境實體查詢。所以,使用文件系統(tǒng)的需求基本上是被排除了。

        5.監(jiān)聽和接收socket連接,或者用socket進行多路發(fā)送。ejb組件并不意味著提供網(wǎng)絡(luò)socket服務(wù)器功能,但是,這個體系結(jié)構(gòu)使得ejb組件可以作為socket客戶或是rmi客戶并且可以和容器所管理的環(huán)境外面的代碼進行通訊。

        6.使用映象api查詢ejb組件由于安全規(guī)則所不能訪問的類。這個約束加強了java平臺的安全性。

        7.欲創(chuàng)建或獲得一個類的加載器,設(shè)置或創(chuàng)建一個新的安全管理器,停止java虛擬機,改變輸入、輸出和出錯流。這個約束加強了安全性同時保留了ejb容器管理運行環(huán)境的能力。

        8.設(shè)置socket工廠被url's serversocket,socket和stream handler使用。避免這個特點,可以加強安全性同時保留了ejb容器管理運行環(huán)境的能力。

        9.使用任何方法啟動、停止和管理線程。這個約束消除了與ejb容器管理死鎖、線程

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

        通過限制使用10-16幾個特點,你的目標(biāo)是堵上一個潛在的安全漏洞:

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

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

        12.加載原始的類庫。

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

        14.在包中定義一個類。

        15.訪問或修改安全配置對象(策略、安全、提供者、簽名者和實體)。

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

        17.傳遞this引用指針作為一個參數(shù)或者作為返回值返回this引用指針。你必須使用

        sessioncontext或entitycontext中的getejbobject的結(jié)果。

        java2平臺的安全策略

        以上所列的特點事實上正是java編程語言和java2標(biāo)準(zhǔn)版中的標(biāo)準(zhǔn)的、強有力的特色。ejb容器允許從j2se中使用一些或全部的受限制的特色,盡管對于ejb組件是不可用的,但需通過j2se的安全機制來使用而不是通過直接使用j2se的api。

        java2平臺為ejb1.1規(guī)范中的ejb容器所制定的安全策略定義了安全許可集,這些許可在ejb組件的編程限制中出現(xiàn)。通過這個策略,定義了一些許可諸如:java.io.filepermission,.netpermission,java.io.reflect.reflectpermission,java.lang.security.securitypermission,以便加強先前所列出的編程限制。

        許多ejb容器沒有加強這些限制,他們希望ejb組件開發(fā)者能遵守這些編程限制或者是帶有冒險想法違背了這些限制。違背這些限制的ejb組件,比標(biāo)準(zhǔn)方法依賴過多或過少的安全許可,都將很少能在多個ejb容器間移植。另外,代碼中都將隱藏著一些不確定的、難以預(yù)測的問題。所有這些都足以使ejb組件開發(fā)者應(yīng)該知道這些編程限制,同時也應(yīng)該認(rèn)真地遵守它們。

        任何違背了這些編程限制的ejb組件的實現(xiàn)代碼在編譯時都不能檢查出來,因為這些特點都是java語言和j2se中不可缺少的部分。

        對于ejb組件的這些限制同樣適用于ejb組件所使用的幫助/訪問(helper/access)類,j2ee應(yīng)用程序使用java文檔(jar)文件格式打包到一個帶.ear(代表enterprise archive)擴展名的文件中,這個ear文件對于發(fā)送給文件部署器來說是標(biāo)準(zhǔn)的格式。ear文件中包括在一個或多個ejb-jar文件中的ejb組件,還可能有ejb-jar所依賴的庫文件。所有ear文件中的代碼都是經(jīng)過深思熟慮開發(fā)的應(yīng)用程序并且都遵守編程限制和訪問許可集。

        未來版本的規(guī)范可能會指定通過部署工具來定制安全許可的能力,通過這種方法指定了一個合法的組件應(yīng)授予的許可權(quán)限,也指定了一個標(biāo)準(zhǔn)方法的需求:如從文件系統(tǒng)中讀文件應(yīng)有哪些要求。一些ejb容器/服務(wù)器目前在它們的部署工具中都提供了比標(biāo)準(zhǔn)權(quán)限或多或少的許可權(quán)限,這些并不是ejb1.1規(guī)范中所需要的。

        理解這些約束

        ejb容器是ejb組件生存和執(zhí)行的運行期環(huán)境,ejb容器為ejb組件實例提供了一些服務(wù)如:事務(wù)管理、安全持久化、資源訪問、客戶端連接。ejb容器也負(fù)責(zé)ejb組件實例整個生命期的管理、擴展問題以及并發(fā)處理。所以,ejb組件就這樣寄居在一個被管理的執(zhí)行環(huán)境中--即ejb容器。

        因為ejb容器完全負(fù)責(zé)ejb組件的生命期、并發(fā)處理、資源訪問、安全等等,所以與容器本身的鎖定和并發(fā)管理相沖突的可能性就需要消除,許多限制都需要使用來填上潛在的安全漏洞。除了與ejb容器責(zé)任與安全沖突的問題,ejb組件還意味著僅僅聚焦于商務(wù)邏輯,它依賴于ejb容器所提供的服務(wù)而不是自己來直接解決底層的系統(tǒng)層的問題。 3 4 5 6 7 8 9 10 11 12 13 14 15

        可能的問題

        通常,ejb組件在容器之間的移植不可避免地與如下問題相關(guān):

        1.它需要依靠的受限制的特點在特定ejb容器中沒有得到加強。

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

        為了保證ejb組件的可移植性和一致的行為,你應(yīng)該使用一個具有與java2平臺安全

        策略集相一致的策略集的容器來測試ejb組件,并且其加強了前述的編程限制。

        總結(jié)

        ejb組件開發(fā)者應(yīng)該知道這些推薦的關(guān)于ejb組件的編程限制,明白它們的重要性,并且從組件的穩(wěn)定性和可移植性利益方面考慮來遵循它們。因為這些編程限制能阻止你使用標(biāo)準(zhǔn)的java語言的特點,違背了這些編程限制在編譯時不會知道,并且加強這些限制也不是ejb容器的責(zé)任。所有這些原因都使你應(yīng)很小心地遵守這些編程限制,這些限制在組件的合同中已經(jīng)成為了一個條款,并且它們對于建造可靠的、可移植的組件是非常重要的。

        2. 優(yōu)化ejb

        entity bean為在應(yīng)用程序和設(shè)計中描述持久化商業(yè)對象(persistent business objec ts)提供了一個清晰的模型。在java對象模型中,簡單對象通常都是以一種簡單的方式進行處理但是,很多商業(yè)對象所需要的事務(wù)化的持久性管理沒有得到實現(xiàn)。entity bean將持久化機制封裝在容器提供的服務(wù)里,并且隱藏了所有的復(fù)雜性。entity bean允許應(yīng)用程序操縱他們就像處理一個一般的java對象應(yīng)用。除了從調(diào)用代碼中隱藏持久化的形式和機制外,entity bean還允許ejb容器對對象的持久化進行優(yōu)化,保證數(shù)據(jù)存儲具有開放性,靈活性,以及可部署性。在一些基于ejb技術(shù)的項目中,廣泛的使用oo技術(shù)導(dǎo)致了對entity bean的大量使用,sun的工程師們已經(jīng)積累了很多使用entity bean的經(jīng)驗,這篇文章就詳細(xì)闡述的這些卡發(fā)經(jīng)驗:

        *探索各種優(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ù)庫寫操作。另外一個優(yōu)化是在調(diào)用find方法的時候。通常情況下find方法需要進行以下數(shù)據(jù)庫操作:

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

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

        cmp允許將這兩步操作優(yōu)化為一步就可以搞定。[具體怎么做我也沒弄明白,原文沒有具體闡述]

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

        許多情況下,ejb的開發(fā)者可能無法控制他們寫的bean怎么樣被部署,以及使用的container是不是支持cmp.

        一個有效的解決方案是,將商業(yè)邏輯的編碼完全和持久化機制分離。再cmp類中實現(xiàn)商業(yè)邏輯,然后再編寫一個bmp類,用該類繼承cmp類。這樣的話,所有的商業(yè)邏輯都在cmp類中,而持久化機制在bmp中實現(xiàn)。[我覺得這種情況在實際工作中很少遇到,但是作者解決問題的思路值得學(xué)習(xí)]

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

        如果使用bmp,設(shè)置一個緩存數(shù)據(jù)改變標(biāo)志dirty非常有用。所有改變數(shù)據(jù)庫中底層數(shù)據(jù)的操作,都要設(shè)置dirty,而在ejbstore中,首先檢測dirty的值,如果dirty的值沒有改變,表明目前數(shù)據(jù)庫中的數(shù)據(jù)與緩存的一致,就不必進行數(shù)據(jù)庫操作了,反之,就要把緩存數(shù)據(jù)寫入數(shù)據(jù)庫。

        法則4:總是將從lookup和find中獲得的引用進行緩存。(cache)

        引用緩存對session bean和entity bean 都是適用的。

        通過jndi lookup獲得ejb資源。比如datasource,bean的引用等等都要付出相當(dāng)大的代價。因此應(yīng)該避免多余的lookup.可以這樣做:

        將這些引用定義為實例變量。

        從setentitycontext(session bean使用setsessioncontext)方法查找他們。setentitycontext方法對于一個bean實例只執(zhí)行一次,所有的相關(guān)引用都在這一次中進行查找,這樣查找的代價就不是那么昂貴了。應(yīng)該避免在其他方法中查找引用。尤其是訪問數(shù)據(jù)庫的方法:ejbload和ejbstore,如果在這些頻繁調(diào)用的方法中進行datasource的查找,勢必造成時間的浪費。

        調(diào)用其他entity bean的finder方法也是一種重量級的調(diào)用。多次調(diào)用finder方法的代價非常高。如果這種引用不適合放在setentitycontext這樣的初始化時執(zhí)行的方法中執(zhí)行,就應(yīng)該在適當(dāng)?shù)臅r候緩存finder的執(zhí)行結(jié)果。只是要注意的是,如果這個引用只對當(dāng)前的entity有效,你就需要在bean從緩沖池中取出來代表另外一個實體時清除掉這些引用。,這些操作應(yīng)該在ejbactivate中進行。

        法則5:總是使用prepare statements

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

        數(shù)據(jù)庫在處理每一個sql statement的時候,執(zhí)行前都要對statement進行編譯。一些數(shù)據(jù)庫具有緩存statement和statement的編譯后形式的功能。數(shù)據(jù)庫可以把新的statement和緩存中的進行匹配。然而,如果要使用這一優(yōu)化特性,新的statement要必須和緩存中的statement完全匹配。

        對于non-prepared statement,數(shù)據(jù)和statement本身作為一個字符串傳遞,這樣由于前后調(diào)用的數(shù)據(jù)不同而不能匹配,就導(dǎo)致無法使用這種優(yōu)化。而對于prepared statement,數(shù)據(jù)和statement是分開傳遞給數(shù)據(jù)庫的,這樣statement就可以和cache中已編譯的statement進行匹配。statement就不必每次都進行編譯操作。從而使用該優(yōu)化屬性。

        【5】【6】【7】【8】【9】【10】【11】【12】【13】【14】【15】

        這項技術(shù)在一些小型的數(shù)據(jù)庫訪問中能夠減少statement將近90%的執(zhí)行時間。

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

        在編寫bmp的數(shù)據(jù)庫訪問代碼時,記住一定要在數(shù)據(jù)庫訪問調(diào)用之后關(guān)閉statement,因為每個打開的statement對應(yīng)于數(shù)據(jù)庫中的一個打開的游標(biāo)。

        security

        1.加密

        對稱加密

        (1)分組密碼

        (2)流密碼

        常用的對稱加密算法:

        des和tripledes

        blowfish

        rc4

        aes

        非對稱加密

        常用的非對稱加密算法

        rsa

        elgamal

        會話密鑰加密(對稱加密和非對稱加密一起使用)

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

        s/mime

        pgp

        ssl和tls ssl是在application level protocal和transport protocal之間的。

        比如:http和tcp/ip之間

        ssl 提供了服務(wù)器端認(rèn)證和可選的客戶端認(rèn)證,保密性和數(shù)據(jù)完整性。

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

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

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

        客戶端認(rèn)證。

        客戶端認(rèn)證比服務(wù)器端認(rèn)證不很普遍的原因是每一個要被認(rèn)證的客戶都必須有一張verisign這樣的ca簽發(fā)的證書。

        通常,在進行身份認(rèn)證的時候,應(yīng)當(dāng)只接受一個ca,這個ca的名字包含在客戶證書中。

        由于不可能隨意創(chuàng)建一個由指定ca簽發(fā)的證書,所以這可以有效的防御通過偽造證書來進行的攻擊嘗試。

        2.認(rèn)證(authentication)

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

        1.消息摘要

        md5

        sha和sha-1

        2.消息認(rèn)證碼(message authientication codes,mac)

        3.數(shù)字簽名

        用戶可以用自己的密鑰對信息加以處理,由于密鑰僅為本人所有,這樣就產(chǎn)生了別人無法生成的文件,也就形成了數(shù)字簽名

        數(shù)字簽名可以

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

        2)驗證用戶的身份

        數(shù)字簽名采用一個人的私鑰計算出來,然后用公鑰去檢驗。

        hash算法 私鑰加密

        原報文 ――――――>;報文摘要( message digest ) ―――――>;數(shù)字簽名

        原報文和數(shù)字簽名一起被發(fā)送到接受者那里,接受者用同樣的hash算法得到報文摘要,然后用發(fā)送者的公鑰解開數(shù)字簽名。

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

        驗證數(shù)字簽名必須使用公鑰,但是,除非你是通過安全的方式直接得到,否則不能保證公鑰的正確性。(數(shù)字證書可以解決這個問題)

        一個接受者在使用公鑰(public key)檢查數(shù)字簽名(digital signature)的可信度時,通常先要檢查收到的公鑰(public key)是否可信的。

        因此發(fā)送方不是單單地發(fā)送公鑰(public key),而是發(fā)送一個包含公鑰(public key)的數(shù)字證書(cetificate )。

        4.數(shù)字證書

        數(shù)字證書是一個經(jīng)證書授權(quán)中心數(shù)字簽名的包含公開密鑰所有者信息以及公開密鑰的文件。

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

        i. 用戶的公鑰(public key)

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

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

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

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

        注意:一個數(shù)字證書certificate并不適用于多種browser,甚至一種browser的多個版本。

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

        當(dāng)在郵件中添加數(shù)字簽名時,您就把數(shù)字簽名和公用密鑰加入到郵件中。數(shù)字簽名和公用密鑰統(tǒng)稱為證書。您可以使用 outlook express 來指定他人向您發(fā)送加密郵件時所需使用的證書。這個證書可以不同于您的簽名證書。

        收件人可以使用您的數(shù)字簽名來驗證您的身份,并可使用公用密鑰給您發(fā)送加密郵件,這些郵件必須用您的私人密鑰才能閱讀。

        要發(fā)送加密郵件,您的通訊簿必須包含收件人的數(shù)字標(biāo)識。這樣,您就可以使用他們的公用密鑰來加密郵件了。當(dāng)收件人收到加密郵件后,用他們的私人密鑰來對郵件進行解密才能閱讀。

        在能夠發(fā)送帶有數(shù)字簽名的郵件之前,您必須獲得數(shù)字標(biāo)識。如果您正在發(fā)送加密郵件,您的通訊簿中必須包含每位收件人的數(shù)字標(biāo)識。

        數(shù)字證書,可以是個人證書或 web 站點證書,用于將身份與"公開密鑰"關(guān)聯(lián)。只有證書的所有者才知道允許所有者"解密"或進行"數(shù)字簽名"的相應(yīng)"私人密鑰"。當(dāng)您將自己的證書發(fā)送給其他人時,實際上發(fā)給他們的是您的公開密鑰,這樣他們就可以向您發(fā)送只能由您使用私人密鑰解密和讀取的加密信息。

        通過瀏覽器使用數(shù)字證書,必須先要設(shè)置瀏覽器軟件 internet explorer 或 netscape使用此證書,才能開始發(fā)送加密或需要數(shù)字簽名的信息。訪問安全的 web 站點(以"https"打頭的站點)時,該站點將自動向您發(fā)送他們的web站點證書。

        3.ca(證書授證中心)

        ca機構(gòu),又稱為證書授證(certificate authority)中心,作為電子商務(wù)交易中受信任的第三方,承擔(dān)公鑰體系中公鑰的合法性檢驗的責(zé)任。ca中心為每個使用公開密鑰的用戶發(fā)放一個數(shù)字證書,數(shù)字證書的作用是證明證書中列出的用戶合法擁有證書中列出的公開密鑰。ca機構(gòu)的數(shù)字簽名使得攻擊者不能偽造和篡改證書。在set交易中,ca不僅對持卡人、商戶發(fā)放證書,還要對獲款的銀行、網(wǎng)關(guān)發(fā)放證書。它負(fù)責(zé)產(chǎn)生、分配并管理所有參與網(wǎng)上交易的個體所需的數(shù)字證書,因此是安全電子交易的核心環(huán)節(jié)。

        〖5〗〖6〗〖7〗〖8〗〖9〗〖10〗〖11〗〖12〗〖13〗〖14〗〖15〗

        對證書的信任基于對根證書的信任. 例如在申請sheca的個人數(shù)字證書前,需要先下載根證書,然后再進行各類證書的申請。

        下載根證書的目的:

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

        申請個人數(shù)字證書可以為internet用戶提供發(fā)送電子郵件的安全和訪問需要安全連接(需要客戶證書)的站點。

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

        a.個人身份證書

        個人身份證書是用來表明和驗證個人在網(wǎng)絡(luò)上的身份的證書,它確保了網(wǎng)上交易和作業(yè)的安全性和可靠性。可應(yīng)用于:網(wǎng)上炒股、網(wǎng)上理財、網(wǎng)上保險、網(wǎng)上繳費、網(wǎng)上購物、網(wǎng)上辦公等等。個人身份證書可以存儲在軟盤或ic卡中。

        b.個人安全電子郵件證書

        個人安全電子郵件證書可以確保郵件的真實性和保密性。申請后一般是安裝在用戶的瀏覽器里。用戶可以利用它來發(fā)送簽名或加密的電子郵件。

        用戶在申請安裝完安全安全電子郵件數(shù)字證書后,就可以對要發(fā)送的郵件進行數(shù)字簽名。收信人收到該郵件后,就可以看到數(shù)字簽名的標(biāo)記,這樣就可以證明郵件肯定來自發(fā)信者本人,而不是別人盜用該帳號偽造信件,同時也保證該郵件在傳送過程中沒被他人篡改過任何數(shù)據(jù)。

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

        保密性 通過使用收件人的數(shù)字證書對電子郵件加密。如此以來,只有收件人才能閱讀加密的郵件,在internet上傳遞的電子郵件信息不會被人竊取,即使發(fā)錯郵件,收件人也無法看到郵件內(nèi)容。

        認(rèn)證身份 在internet上傳遞電子郵件的雙方互相不能見面,所以必須有方法確定對方的身份。利用發(fā)件人數(shù)字證書在傳送前對電子郵件進行數(shù)字簽名即可確定發(fā)件人身份,而不是他人冒充的。

        完整性 利用發(fā)件人數(shù)字證書在傳送前對電子郵件進行數(shù)字簽名不僅可確定發(fā)件人身份,而且傳遞的電子郵件信息也不能被人在傳輸過程中修改。

        不可否認(rèn)性 由于發(fā)件人的數(shù)字證書只有發(fā)件人唯一擁有,故發(fā)件人利用其數(shù)字證書在傳送前對電子郵件進行數(shù)字簽名,發(fā)件人就無法否認(rèn)發(fā)過這個電子郵件。

        outlook express中的個人安全電子郵件證書

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

        簽名郵件可能出現(xiàn)的任何問題都將在本信息之后可能出現(xiàn)的“安全警告”中得到描述。如果存在問題,您應(yīng)該認(rèn)為郵件已被篡改,或并非來自所謂的發(fā)件人。

        當(dāng)收到一封加密郵件時,您應(yīng)該可以自信地認(rèn)為郵件未被任何第三者讀過。outlook express 會自動對電子郵件解密, 如果在您的計算機上裝有正確的數(shù)字標(biāo)識。

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

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

        企業(yè)身份證書是用來表明和驗證企業(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è)安全電子郵件證書可以確保郵件的真實性和保密性。申請后一般是安裝在用戶的瀏覽器里。企業(yè)可以利用它來發(fā)送簽名或加密的電子郵件。

        可使用 windows 中的證書服務(wù)來創(chuàng)建證書頒發(fā)機構(gòu) (ca),它負(fù)責(zé)接收證書申請、驗證申請中的信息和申請者的身份、頒發(fā)證書、吊銷證書以及發(fā)布證書吊銷列表 (crl)。

        通常,當(dāng)用戶發(fā)出證書申請時,在其計算機上的加密服務(wù)提供程序 (csp) 為用戶生成公鑰和私鑰對。用戶的公鑰隨同必要的識別信息發(fā)送至 ca。如果用戶的識別信息符合批準(zhǔn)申請的 ca 標(biāo)準(zhǔn),那么 ca 將生成證書,該證書由客戶應(yīng)用程序檢索并就地存儲。

        4.set

        安全接口層協(xié)議——ssl(se cure socketslayer),并且已經(jīng)幾乎成為了目前www 世界的事實標(biāo)準(zhǔn)。這一標(biāo)準(zhǔn)使用公共密鑰編碼方案來對傳輸數(shù)據(jù)進行加密,在雙方之間建立一個internet 上的加密通道,從而使第三方無法獲得其中的信息,其思路與目前流行的方案大致相同,目的都是要保護數(shù)據(jù)不被未經(jīng)授權(quán)的第三方所竊聽,或即使竊聽到也不知所云。但就象 一樣,ssl 在認(rèn)證方面沒有任何作為,它們都需要通過另外的手段來確認(rèn)身份和建立雙方彼此間的信任,然后再通過ssl 進行交易。

        正是由于ssl 標(biāo)準(zhǔn)在認(rèn)證方面的缺憾,所以set 才有存在的必要。set(secure electronic transactions) 規(guī)范由masterc ard 和visa 公司于1996 年發(fā)布,專家們認(rèn)為set 是保證用戶與商家在電子商務(wù)與在線交易中免受欺騙的重要手段。傳統(tǒng)的信用卡交易者總在擔(dān)心不誠實的店員會將自己的信用卡號碼透露給他人,而在線交易也是如此,持卡者總在擔(dān)心服務(wù)器端的管理員會將信用卡號碼泄露出去,或者擔(dān)心黑客會在管理員不知情的情況下盜取信用卡號碼。事實上這些擔(dān)心都是必要的,而set 標(biāo)準(zhǔn)則可以保證用戶的信用卡號碼只傳送給信用卡公司進行認(rèn)證,不會被系統(tǒng)管理員看到,也不會留在交易服務(wù)器的硬盤上給黑客以可乘之機。

        5.pki

        pki是一種易于管理的、集中化的網(wǎng)絡(luò)安全方案。它可支持多種形式的數(shù)字認(rèn)證: 數(shù)據(jù)加密、數(shù)字簽字、不可否認(rèn)、身份鑒別、密鑰管理以及交叉認(rèn)證等。pki可通過一個基于認(rèn)證的框架處理所有的數(shù)據(jù)加密和數(shù)字簽字工作。p ki標(biāo)準(zhǔn)與協(xié)議的開發(fā)迄今已有20xx年的歷史,目前的pki已完全可以向企業(yè)網(wǎng)絡(luò)提供有效的安全保障。 〖5〗〖6〗〖7〗〖8〗〖9〗〖10〗〖11〗〖12〗〖13〗〖14〗〖15〗

        pki是一種遵循標(biāo)準(zhǔn)的密鑰管理平臺,它能夠為所有網(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)建

        一個pki由眾多部件組成,這些部件共同完成兩個主要功能:

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

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

        服務(wù)器(即后端)產(chǎn)品是這一系統(tǒng)的核心,這些數(shù)據(jù)庫管理著數(shù)字認(rèn)證、公共密鑰及專用密鑰( 分別用于數(shù)據(jù)的加密和解密)。

        ca數(shù)據(jù)庫負(fù)責(zé)發(fā)布、廢除和修改x.509數(shù)字認(rèn)證信息,它裝有用戶的公共密鑰、證書有效期以及認(rèn)證功能(例如對數(shù)據(jù)的加密或?qū)?shù)字簽字的驗證) 。為了防止對數(shù)據(jù)簽字的篡改,ca在把每一數(shù)字簽字發(fā)送給發(fā)出請求的客戶機之前,需對每一個數(shù)字簽字進行認(rèn)證。一旦數(shù)字認(rèn)證得以創(chuàng)建, 它將會被自動存儲于x.500目錄中,x.500目錄為樹形結(jié)構(gòu)。ldap(lightweight directory access protocol)協(xié)議將響應(yīng)那些要求提交所存儲的公共密鑰認(rèn)證的請求。ca為每一用戶或服務(wù)器生成兩對獨立的公共和專用密鑰。其中一對用于信息的加密和解密, 另一對由客戶機應(yīng)用程序使用,用于文檔或信息傳輸中數(shù)字簽字的創(chuàng)建。

        大多數(shù)pki均支持證書分布,這是一個把已發(fā)布過的或續(xù)延生命期的證書加以存儲的過程。這一過程使用了一個公共查詢機制,x.500目錄可自動完成這一存儲過程。影響企業(yè)普遍接受p ki的一大障礙是不同ca之間的交叉認(rèn)證。假設(shè)有兩家公司,每一家企業(yè)分別使用來自不同供應(yīng)商的ca,現(xiàn)在它們希望相互托管一段時間。如果其后援?dāng)?shù)據(jù)庫支持交叉認(rèn)證, 則這兩家企業(yè)顯然可以互相托管它們的ca,因而它們所托管的所有用戶均可由兩家企業(yè)的ca所托管。

        * 認(rèn)證機關(guān)

        ca是證書的簽發(fā)機構(gòu),它是pki的核心。眾所周知,構(gòu)建密碼服務(wù)系統(tǒng)的核心內(nèi)容是如何實現(xiàn)密鑰管理,公鑰體制涉及到一對密鑰,即私鑰和公鑰, 私鑰只由持有者秘密掌握,無須在網(wǎng)上傳送,而公鑰是公開的,需要在網(wǎng)上傳送,故公鑰體制的密鑰管理主要是公鑰的管理問題,目前較好的解決方案是引進證書(certificate)機制。

        證書是公開密鑰體制的一種密鑰管理媒介。它是一種權(quán)威性的電子文檔,形同網(wǎng)絡(luò)計算環(huán)境中的一種身份證,用于證明某一主體(如人、服務(wù)器等)的身份以及其公開密鑰的合法性。在使用公鑰體制的網(wǎng)絡(luò)環(huán)境中, 必須向公鑰的使用者證明公鑰的真實合法性。因此,在公鑰體制環(huán)境中,必須有一個可信的機構(gòu)來對任何一個主體的公鑰進行公證,證明主體的身份以及他與公鑰的匹配關(guān)系。c a正是這樣的機構(gòu),它的職責(zé)歸納起來有:

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

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

        3、確保整個簽證過程的安全性,確保簽名私鑰的安全性;

        4、證書材料信息(包括公鑰證書序列號、ca標(biāo)識等)的管理;

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

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

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

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

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

        其中最為重要的是ca自己的一對密鑰的管理,它必須確保其高度的機密性,防止他方偽造證書。ca的公鑰在網(wǎng)上公開,整個網(wǎng)絡(luò)系統(tǒng)必須保證完整性。

        * 證書庫

        證書庫是證書的集中存放地,它與網(wǎng)上"白頁”類似,是網(wǎng)上的一種公共信息庫,用戶可以從此處獲得其他用戶的證書和公鑰。

        構(gòu)造證書庫的最佳方法是采用支持ldap協(xié)議的目錄系統(tǒng),用戶或相關(guān)的應(yīng)用通過ldap來訪問證書庫。系統(tǒng)必須確保證書庫的完整性,防止偽造、篡改證書。

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

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

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

        pki的價值在于使用戶能夠方便地使用加密、數(shù)字簽名等安全服務(wù),因此一個完整的pki必須提供良好的應(yīng)用接口系統(tǒng),使得各種各樣的應(yīng)用能夠以安全、一致、可信的方式與p ki交互,確保所建立起來的網(wǎng)絡(luò)環(huán)境的可信性,同時降低管理維護成本。最后,pki應(yīng)用接口系統(tǒng)應(yīng)該是跨平臺的。

        許多權(quán)威的認(rèn)證方案供應(yīng)商(例如verisign、thawte以及gte)目前都在提供外包的pki。外包pki最大的問題是,用戶必須把企業(yè)托管給某一服務(wù)提供商, 即讓出對網(wǎng)絡(luò)安全的控制權(quán)。如果不愿這樣做,則可建造一個專用的pki。專用方案通常需把來自entrust、baltimore technologies以及xcert的多種服務(wù)器產(chǎn)品與來自主流應(yīng)用程序供應(yīng)商(如microsoft、netscape以及qualcomm)的產(chǎn)品組合在一起。專用pk i還要求企業(yè)在準(zhǔn)備其基礎(chǔ)設(shè)施的過程中投入大量的財力與物力。

        7.jaas

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

        “java 認(rèn)證和授權(quán)服務(wù)”(java authentication and authorization service,jaas)

        在 jaas 下,可以給予用戶或服務(wù)特定的許可權(quán)來執(zhí)行 java 類中的代碼。在本文中,軟件工程師 carlos fonseca 向您展示如何為企業(yè)擴展 jaas 框架。向 jaas 框架添加類實例級授權(quán)和特定關(guān)系使您能夠構(gòu)建更動態(tài)、更靈活并且伸縮性更好的企業(yè)應(yīng)用程序。

        大多數(shù) java 應(yīng)用程序都需要某種類實例級的訪問控制。例如,基于 web 的、自我服務(wù)的拍賣應(yīng)用程序的規(guī)范可能有下列要求: 《5》《6》《7》《8》《9》《10》《11》《12》《13》《14》《15》

        任何已注冊(經(jīng)過認(rèn)證)的用戶都可以創(chuàng)建一個拍賣,但只有創(chuàng)建拍賣的用戶才可以修改這個拍賣。

        這意味著任何用戶都可以執(zhí)行被編寫用來創(chuàng)建 auction 類實例的代碼,但只有擁有該實例的用戶可以執(zhí)行用來修改它的代碼。通常情況下,創(chuàng)建 auction 實例的用戶就是所有者。這被稱為類實例所有者關(guān)系(class instance owner relationship)。

        該應(yīng)用程序的另一個要求可能是:

        任何用戶都可以為拍賣創(chuàng)建一個投標(biāo),拍賣的所有者可以接受或拒絕任何投標(biāo)。

        再一次,任何用戶都可以執(zhí)行被編寫用來創(chuàng)建 bid 類實例的代碼,但只有擁有該實例的用戶會被授予修改該實例的許可權(quán)。而且,auction 類實例的所有者必須能夠修改相關(guān)的 bid 類實例中的接受標(biāo)志。這意味著在 auction 實例和相應(yīng)的 bid 實例之間有一種被稱為特定關(guān)系(special relationship)的關(guān)系。

        不幸的是,“java 認(rèn)證和授權(quán)服務(wù)”(jaas)— 它是 java 2 平臺的一部分 — 沒有考慮到類實例級訪問控制或者特定關(guān)系。在本文中,我們將擴展 jaas 框架使其同時包含這兩者。推動這種擴展的動力是允許我們將訪問控制分離到一個通用的框架,該框架使用基于所有權(quán)和特定關(guān)系的策略。然后管理員可以在應(yīng)用程序的生命周期內(nèi)更改這些策略。

        在深入到擴展 jaas 框架之前,我們將重溫一下 java 2 平臺的訪問控制機制。我們將討論策略文件和許可權(quán)的使用,并討論 securitymanager 和 accesscontroller 之間的關(guān)系。

        java 2 平臺中的訪問控制

        在 java 2 平臺中,所有的代碼,不管它是本地代碼還是遠(yuǎn)程代碼,都可以由策略來控制。策略(policy)由不同位置上的代碼的一組許可權(quán)定義,或者由不同的簽發(fā)者定義、或者由這兩者定義。許可權(quán)允許對資源進行訪問;它通過名稱來定義,并且可能與某些操作關(guān)聯(lián)在一起。

        抽象類 java.security.policy 被用于表示應(yīng)用程序的安全性策略。缺省的實現(xiàn)由 sun.security.provider.policyfile 提供,在 sun.security.provider.policyfile 中,策略被定義在一個文件中。清單 1 是一個典型策略文件示例:

        清單 1. 一個典型的策略文件

        // grant these permissions to code loaded from a sample.jar file

        // in the c drive and if it is signed by xyz

        grant codebase "file:/c:/sample.jar", signedby "xyz" {

        // allow socket actions to any host using port 8080

        permission .socketpermission "*:8080", "accept, connect,

        listen, resolve";

        // allows file access (read, write, execute, delete) in

        // the user's home directory.

        permission java.io.filepermission "${user.home}/-", "read, write,

        execute, delete";

        };

        securitymanager 對 accesscontroller

        在標(biāo)準(zhǔn) jdk 分發(fā)版中,控制代碼源訪問的機制缺省情況下是關(guān)閉的。在 java 2 平臺以前,對代碼源的訪問都是由 securitymanager 類管理的。securitymanager 是由 java.security.manager 系統(tǒng)屬性啟動的,如下所示:

        java -djava.security.manager

        在 java 2 平臺中,可以將一個應(yīng)用程序設(shè)置為使用 java.lang.securitymanager 類或者 java.security.accesscontroller 類管理敏感的操作。accesscontroller 在 java 2 平臺中是新出現(xiàn)的。為便于向后兼容,securitymanager 類仍然存在,但把自己的決定提交 accesscontroller 類裁決。securitymanager 和 accesscontroller 都使用應(yīng)用程序的策略文件確定是否允許一個被請求的操作。清單 2 顯示了 accesscontroller 如何處理 socketpermission 請求:

        清單 2. 保護敏感操作

        public void somemethod {

        permission permission =

        new .socketpermission("localhost:8080", "connect");

        accesscontroller.checkpermission(permission);

        // sensitive code starts here

        socket s = new socket("localhost", 8080);

        }

        在這個示例中,我們看到 accesscontroller 檢查應(yīng)用程序的當(dāng)前策略實現(xiàn)。如果策略文件中定義的任何許可權(quán)暗示了被請求的許可權(quán),該方法將只簡單地返回;否則拋出一個 accesscontrolexception 異常。在這個示例中,檢查實際上是多余的,因為缺省套接字實現(xiàn)的構(gòu)造函數(shù)也執(zhí)行相同的檢查。

        在下一部分,我們將更仔細(xì)地看一下 accesscontroller 如何與 java.security.policy 實現(xiàn)共同合作安全地處理應(yīng)用程序請求。

        運行中的 accesscontroller

        accesscontroller 類典型的 checkpermission(permission p) 方法調(diào)用可能會導(dǎo)致下面的一系列操作:

        accesscontroller 調(diào)用 java.security.policy 類實現(xiàn)的 getpermissions(codesource codesource) 方法。

        getpermissions(codesource codesource) 方法返回一個 permissioncollection 類實例,這個類實例代表一個相同類型許可權(quán)的集合。

        accesscontroller 調(diào)用 permissioncollection 類的 implies(permission p) 方法。

        接下來,permissioncollection 調(diào)用集合中包含的單個 permission 對象的 implies(permission p) 方法。如果集合中的當(dāng)前許可權(quán)對象暗示指定的許可權(quán),則這些方法返回 true,否則返回 false。

        [1][2][3][4][5][6][7][8][9][10][11][12][13][14][15]

        現(xiàn)在,讓我們更詳細(xì)地看一下這個訪問控制序列中的重要元素。

        permissioncollection 類

        大多數(shù)許可權(quán)類類型都有一個相應(yīng)的 permissioncollection 類。這樣一個集合的實例可以通過調(diào)用 permission 子類實現(xiàn)定義的 newpermissioncollection 方法來創(chuàng)建。java.security.policy 類實現(xiàn)的 getpermissions 方法也可以返回 permissions 類實例 — permissioncollection 的一個子類。這個類代表由 permissioncollection 組織的不同類型許可權(quán)對象的一個集合。permissions 類的 implies(permission p) 方法可以調(diào)用單個 permissioncollection 類的 implies(permission p) 方法。

        codesource 和 protectiondomain 類

        許可權(quán)組合與 codesource(被用于驗證簽碼(signed code)的代碼位置和證書)被封裝在 protectiondomain 類中。有相同許可權(quán)和相同 codesource 的類實例被放在相同的域中。帶有相同許可權(quán),但不同 codesource 的類被放在不同的域中。一個類只可屬于一個 protectiondomain。要為對象獲取 protectiondomain,請使用 java.lang.class 類中定義的 getprotectiondomain 方法。

        許可權(quán)

        賦予 codesource 許可權(quán)并不一定意味著允許所暗示的操作。要使操作成功完成,調(diào)用棧中的每個類必須有必需的許可權(quán)。換句話說,如果您將 java.io.filepermission 賦給類 b,而類 b 是由類 a 來調(diào)用,那么類 a 必須也有相同的許可權(quán)或者暗示 java.io.filepermission 的許可權(quán)。

        在另一方面,調(diào)用類可能需要臨時許可權(quán)來完成另一個擁有那些許可權(quán)的類中的操作。例如,當(dāng)從另一個位置加載的類訪問本地文件系統(tǒng)時,我們可能不信任它。但是,本地加載的類被授予對某個目錄的讀許可權(quán)。這些類可以實現(xiàn) privilegedaction 接口來給予調(diào)用類許可權(quán)以便完成指定的操作。調(diào)用棧的檢查在遇到 privilegedaction 實例時停止,有效地將執(zhí)行指定操作所必需的許可權(quán)授予所有的后繼類調(diào)用。

        使用 jaas

        顧名思義,jaas 由兩個主要組件組成:認(rèn)證和授權(quán)。我們主要關(guān)注擴展 jaas 的授權(quán)組件,但開始我們先簡要概述一下 jaas 認(rèn)證,緊接著看一下一個簡單的 jaas 授權(quán)操作。

        jaas 中的用戶認(rèn)證

        jaas 通過添加基于 subject 的策略加強了 java 2 中定義的訪問控制安全性模型。許可權(quán)的授予不僅基于 codesource,還基于執(zhí)行代碼的用戶。顯然,要使這個模型生效,每個用戶都必須經(jīng)過認(rèn)證。

        jaas 的認(rèn)證機制建立在一組可插登錄模塊的基礎(chǔ)上。jaas 分發(fā)版包含幾個 loginmodule 實現(xiàn)。loginmodules 可以用于提示用戶輸入用戶標(biāo)識和密碼。logincontext 類使用一個配置文件來確定使用哪個 loginmodule 對用戶進行認(rèn)證。這個配置可以通過系統(tǒng)屬性 java.security.auth.login.config 指定。一個示例配置是:

        java -djava.security.auth.login.config=login.conf

        下面是一個登錄配置文件的樣子:

        example {

        com.ibm.resource.security.auth.loginmoduleexample required

        debug=true userfile="users.xml" groupfile="groups.xml";

        };

        認(rèn)識您的主體

        subject 類被用于封裝一個被認(rèn)證實體(比如用戶)的憑證。一個 subject 可能擁有一個被稱為主體(principal)的身份分組。例如,如果 subject 是一個用戶,用戶的名字和相關(guān)的社會保險號可能是 subject 的某些身份或主體。主體是與身份名關(guān)聯(lián)在一起的。

        principal 實現(xiàn)類及其名稱都是在 jaas 策略文件中指定的。缺省的 jaas 實現(xiàn)使用的策略文件與 java 2 實現(xiàn)的策略文件相似 — 除了每個授權(quán)語句必須與至少一個主體關(guān)聯(lián)在一起。javax.security.auth.policy 抽象類被用于表示 jaas 安全性策略。它的缺省實現(xiàn)由 com.sun.security.auth.policyfile 提供,在 com.sun.security.auth.policyfile 中策略定義在一個文件中。清單 3 是 jaas 策略文件的一個示例:

        清單 3. 示例 jaas 策略文件

        // example grant entry

        grant codebase "file:/c:/sample.jar", signedby "xyz",

        principal com.ibm.resource.security.auth.principalexample "admin" {

        // allow socket actions to any host using port 8080

        permission .socketpermission

        "*:8080", "accept, connect, listen, resolve";

        // allows file access (read, write, execute, delete) in

        // the user's home directory.

        permission java.io.filepermission

        "${user.home}/-", "read, write, execute, delete";

        };

        這個示例與清單 1 中所示的標(biāo)準(zhǔn) java 2 策略文件相似。實際上,唯一的不同是主體語句,該語句聲明只有擁有指定主體和主體名字的 subject(用戶)被授予指定的許可權(quán)。

        再一次,使用系統(tǒng)屬性 java.security.auth.policy 指出 jaas 策略文件駐留在何處,如下所示:

        java -djava.security.auth.policy=policy.jaas

        subject 類包含幾個方法來作為特殊 subject 執(zhí)行工作;這些方法如下所示:

        public static object

        doas(subject subject, java.security.privilegedaction action) 3 4 5 6 7 8 9 10 11 12 13 14 15

        public static object

        doas(subject subject, java.security.privilegedaction action)

        throws java.security.privilegedactionexception

        注意,用來保護敏感代碼的方法與“java 2 代碼源訪問控制”(java 2 codesource access control)概述中描述的方法相同。請參閱參考資料部分以了解更多關(guān)于 jaas 中代碼源訪問控制和認(rèn)證的信息。

        jaas 中的授權(quán)

        清單 4 顯示一個授權(quán)請求的結(jié)果,該請求使用清單 3 中顯示的 jaas 策略文件。假設(shè)已經(jīng)安裝了 securitymanager,并且 logincontext 已經(jīng)認(rèn)證了一個帶有名為“admin”的 com.ibm.resource.security.auth.principalexample 主體的 subject。

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

        public class jaasexample {

        public static void main(string args) {

        ...

        // where authenticateduser is a subject with

        // a principalexample named admin.

        subject.doas(authenticateduser, new jaasexampleaction);

        ...

        }

        }

        public class jaasexampleaction implements privilegedaction {

        public object run {

        filewriter fw = new filewriter("hi.txt");

        fw.write("hello, world!");

        fw.close;

        }

        }

        這里,敏感代碼被封裝在 jaasexampleaction 類中。還要注意,調(diào)用類不要求為 jaasexampleaction 類代碼源授予許可權(quán),因為它實現(xiàn)了一個 privilegedaction。

        擴展 jaas

        大多數(shù)應(yīng)用程序都有定制邏輯,它授權(quán)用戶不僅僅在類上執(zhí)行操作,而且還在該類的實例上執(zhí)行操作。這種授權(quán)通常建立在用戶和實例之間的關(guān)系上。這是 jaas 的一個小缺點。然而,幸運的是,這樣設(shè)計 jaas 使得 jaas 可以擴展。只要做一點工作,我們將可以擴展 jaas,使其包含一個通用的、類實例級的授權(quán)框架。

        在文章開頭處我已經(jīng)說明了,抽象類 javax.security.auth.policy 被用于代表 jaas 安全性策略。它的缺省實現(xiàn)是由 com.sun.security.auth.policyfile 類提供。policyfile 類從 jaas 格式的文件(象清單 3 中顯示的那個一樣)中讀取策略。

        我們需要向這個文件添加一個東西為類實例級授權(quán)擴展策略定義:一個與許可權(quán)語句相關(guān)的可選關(guān)系參數(shù)。

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

        permission ; [name], [actions];

        我們在這個許可權(quán)語句的末尾添加一個可選的關(guān)系參數(shù)來完成策略定義。下面是新許可權(quán)語句的格式:

        permission ;

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

        在為類實例級授權(quán)擴展 jaas 時要注意的最重要的一點是:許可權(quán)實現(xiàn)類必須有一個帶三個參數(shù)的構(gòu)造函數(shù)。第一個參數(shù)是名稱參數(shù),第二個是行為參數(shù),最后一個是關(guān)系參數(shù)。

        解析新文件格式

        既然文件格式已經(jīng)改變,就需要一個新的 javax.security.auth.policy 子類來解析文件。

        為簡單起見,我們的示例使用了一個新的 javax.security.auth.policy 子類 com.ibm.resource.security.auth.xmlpolicyfile,來從 xml 文件讀取策略。在實際的企業(yè)應(yīng)用程序中,關(guān)系數(shù)據(jù)庫更適合執(zhí)行這個任務(wù)。

        使用 xmlpolicyfile 類代替缺省的 jaas 訪問控制策略實現(xiàn)的最容易的方法是向 java.security 屬性文件添加 auth.policy.provider=com.ibm.resource.security.auth.xmlpolicyfile 條目。java.security 屬性文件位于 java 2 平臺運行時的 lib/security 目錄下。清單 5 是與 xmlpolicyfile 類一起使用的樣本 xml 策略文件:

        清單 5. 一個 xml 策略文件

        ;

        ;

        ;

        "com.ibm.resource.security.auth.principalexample" name="users">;

        "com.ibm.resource.security.auth.resourcepermission"

        name="com.ibm.security.sample.auction"

        actions="create" />;

        "com.ibm.resource.security.auth.resourcepermission"

        name="com.ibm.security.sample.auction"

        actions="read" />;

        "com.ibm.resource.security.auth.resourcepermission"

        name="com.ibm.security.sample.auction"

        actions="write"

        relationship="owner" />;

        "com.ibm.resource.security.auth.resourcepermission"

        name="com.ibm.security.sample.bid"

        actions="create" />;

        "com.ibm.resource.security.auth.resourcepermission"

        name="com.ibm.security.sample.bid"

        actions="read" />;

        "com.ibm.resource.security.auth.resourcepermission"

        【5】【6】【7】【8】【9】【10】【11】【12】【13】【14】【15】

        name="com.ibm.security.sample.bid"

        actions="write"

        relationship="owner" />;

        "com.ibm.resource.security.auth.resourcepermission"

        name="com.ibm.security.sample.bid"

        actions="accept"

        relationship="actionowner" />;

        ;

        ;

        ;

        在這個示例策略文件中,任何與名為 principalexample 的用戶有關(guān)的用戶(subject)都可以創(chuàng)建并讀取一個 auction.class 實例。但是,只有創(chuàng)建該實例的用戶才可以更新(寫)它。這是第三個 permission 元素定義的,該元素包含值為 owner 的 relationship 屬性。bid.class 實例也是一樣,除了相應(yīng) auction.class 實例的所有者可以更改投標(biāo)接受標(biāo)志。

        resource 接口

        要求類實例級訪問控制的類必須實現(xiàn) resource 接口。該接口的 getowner 方法返回類實例的所有者。fulfills(subject subject, string relationship) 方法被用于處理特定關(guān)系。另外,這些類使用 com.ibm.resource.security.auth.resourcepermission 類保護敏感代碼。例如,auction 類擁有下列構(gòu)造函數(shù):

        public auction {

        permission permission =

        new resourcepermission("com.ibm.security.sample.auction", "create");

        accesscontroller.checkpermission(permission);

        }

        所有者關(guān)系

        resourcepermission 類的 implies(permission p) 方法是這個框架的關(guān)鍵。implies 方法就等同性比較名稱和行為屬性。如果定義了一個關(guān)系,那么必須把受保護的類實例(resource)傳遞到 resourcepermission 構(gòu)造函數(shù)中。resourcepermission 類理解所有者關(guān)系。它將類實例的所有者與執(zhí)行代碼的 subject(用戶)進行比較。特定關(guān)系被委托給受保護類的 fulfills 方法。

        例如,在清單 5 中所示的 xml 策略文件中,只有 auction 類實例的所有者可以更新(寫)文件。該類的 setter 方法使用清單 6 中顯示的保護代碼:

        清單 6. 運行中的 implies(permission) 方法

        public void setname(string newname) {

        permission permission =

        new resourcepermission("com.ibm.security.sample.auction", "write", this);

        accesscontroller.checkpermission(permission);

        // sensitive code

        this.name = newname;

        }

        被傳遞到 resourcepermission 構(gòu)造函數(shù)中的 this 引用代表 auction 類實現(xiàn)的 resource 接口。由于策略文件中列出的關(guān)系是 owner,所以 resourcepermission 類使用這個引用檢查當(dāng)前 subject(用戶)是否擁有與實例所有者相匹配的主體。如果指定了另一個關(guān)系,那么 resourcepermission 類調(diào)用 auction 類的 fulfills(subject subject, string relationship) 方法。由 resource 實現(xiàn)類提供 fulfills 方法中的邏輯。

        xml 策略文件中列出的 bid 類擁有清單 7 中所示的方法(假設(shè) bid 類實例有一個對相應(yīng) auction 類實例的引用 — auction)。

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

        public void setaccepted(boolean flag) {

        permission permission =

        new resourcepermission("com.ibm.security.sample.auction", "accept", this);

        accesscontroller.checkpermission(permission);

        // sensitive code

        this.accepted = flag;

        }

        public boolean fulfills(subject user, string relationship) {

        if( relationship.equalsignorecase("auctionowner") ) {

        string auctionowner = auction.getowner;

        iterator principaliterator = user.getprincipals.iterator;

        while(principaliterator.hasnext) {

        principal principal = (principal) principaliterator.next;

        if( principal.getname.equals(auctionowner) )

        return true;

        }

        }

        return false;

        }

        傳遞到 fulfills 方法中的關(guān)系字符串是策略文件中列出的關(guān)系。在這個案例中,我們使用了“auctionowner”字符串。

        缺省情況下,xmlpolicyfile 類在當(dāng)前工作目錄中查找名為 resourcepolicy.xml 的文件。系統(tǒng)屬性 com.ibm.resource.security.auth.policy 可以用于指定另一個不同的文件名和位置。

        websphere application server 示例

        除命令行示例之外,您可能還想運行這個簡單的程序,該程序為了 ibm websphere application server,version 4.0.2 而被優(yōu)化。

        一個可運行的示例

        綜合這些信息,我們將運行一個簡單的命令行示例。該示例程序包含三個 jar 文件:

        resourcesecurity.jar

        example.jar

        exampleactions.jar

        resourcesecurity.jar 文件包含允許實例級訪問控制的 jaas 擴展框架。它還包含一個 loginmoduleexample 類,這個類從 xml 文件讀取用戶認(rèn)證信息。用戶標(biāo)識和密碼存儲在 users.xml 文件中。用戶組存儲在 groups.xml 文件中。關(guān)于 loginmoduleexample 的更多信息,請參閱參考資料部分。

        該示例包含四個附加的文件:

        login.conf

        policy

        resourcepolicy.xml

        run.bat

        在試圖運行這個示例程序之前,請確保更新了 run.bat、policy 和 resourcepolicy.xml 文件中的路徑。缺省情況下,所有的密碼都是“passw0rd”。

        示例如何工作

        該示例程序提示輸入用戶標(biāo)識和密碼。它用 users.xml 文件中的條目核對所提供的用戶標(biāo)識和密碼。在認(rèn)證了用戶之后,程序設(shè)法創(chuàng)建一個 userprofile 類實例,修改它并從中讀取。缺省情況下,userprofile 類的所有者是 jane(jane)。當(dāng) jane 登錄時,三個操作全部成功。當(dāng) john(john)登錄時,只有創(chuàng)建操作成功。當(dāng) jane 的經(jīng)理 lou(lou)登錄時,只有第一個和最后一個操作成功。當(dāng)系統(tǒng)管理員(admin)登錄時,操作全部成功。當(dāng)然,只有當(dāng)提供的 resourcepolicy.xml 文件未被修改時,上述這些才都是真的。

        示例安裝

        下面的安裝指導(dǎo)假設(shè)您正在使用 jdk 1.3 并且已經(jīng)把文件解壓縮到 d:\jaasexample 目錄。通過將文件解壓縮到這個目錄,您可以省去一些工作;否則您就必須使用正確的路徑名修改 policy 和 resourcesecurity.xml 策略文件。

        下面是運行該示例需要做的工作:

        下載這個示例的源文件。

        把 jaas.jar 和 jaasmod.jar 復(fù)制到 jdk jre\lib\ext 目錄(即 d:\jdk1.3\jre\lib\ext)。

        向位于 jdk 的 jre\lib\security 目錄(即 d:\jdk1.3\jre\lib\security)中的 java.security 文件的末尾添加下面的字符串:auth.policy.provider=com.ibm.resource.security.auth.xmlpolicyfile。

        執(zhí)行 run.bat 文件。

        結(jié)束語

        類實例級授權(quán)把訪問控制分離到一個通用框架(該框架使用基于所有權(quán)和特定關(guān)系的策略)中。然后管理員可以在應(yīng)用程序的生命周期內(nèi)更改這些策略。用這種方法擴展 jaas 減少了您或另一個程序員必須在應(yīng)用程序生命周期內(nèi)業(yè)務(wù)規(guī)則發(fā)生更改時重寫代碼的可能性。

        通過將關(guān)系字符串抽象為類可以進一步擴展特定關(guān)系這個概念。不調(diào)用 resource 實現(xiàn)類的 fulfills(subject user, string relationship) 方法,而只要調(diào)用 relationship 實現(xiàn)類中定義的新 fulfills(subject user, resource resource) 方法。這樣就會允許許多 resource 實現(xiàn)類使用相同的關(guān)系邏輯。

        6.java的安全性

        1. the security manager是一個application-wide object ( java.lang.securitymanager)

        每個java application都可以有自己地security manager,但是默認(rèn)地java application沒有一個security manager

        可以通過下面地代碼得到一個security manager

        try

        {

        system.setsecuritymanager(new securitymanager(“--”));

        }

        catch( )

        2.

        jdbc

        在 jdbc 2 開發(fā)的過程中,sql99 還處在一種變化不定的情況下。現(xiàn)在規(guī)范已經(jīng)完成了,而且數(shù)據(jù)庫廠商已經(jīng)采用了部分標(biāo)準(zhǔn)。所以自然地,jdbc 規(guī)范就跟著將自己與 sql99 功能的一部分相統(tǒng)一。最新的 jdbc 規(guī)范已經(jīng)采用了 sql99 標(biāo)準(zhǔn)中那些已經(jīng)被廣泛支持的功能,還有那些在五年內(nèi)可能會獲得支持的功能。

        1. datasource

        在jdbc2.0 optional package中,提供了透明的連接池(connection pooling)。

        一旦配置了j2ee應(yīng)用服務(wù)器后,只要用datasource獲取連接(connection),連接池(connection pooling)就會自動的工作。

        如果用戶希望建立一個數(shù)據(jù)庫連接,通過查詢在jndi服務(wù)中的datasource,可以從datasource中獲取相應(yīng)的數(shù)據(jù)庫連接。

        datasource被認(rèn)為是從jndi中獲取的網(wǎng)絡(luò)資源。

        datasource在池中保存的對象都實現(xiàn)了pooledconnection接口。

        當(dāng)應(yīng)用程序向datasource請求一個connection時,它會找到一個可用的pooledconnection對象。

        如果連接池空了,它就向connectionpoolecdatasource請求一個新的pooledconnection對象

        通過使用 datasource 接口 (jdbc 2.0) 或 drivermanager (jdbc 1.0) 接口,j2ee 組件可以獲得物理數(shù)據(jù)庫連接對象(connection)。要獲得邏輯(合用的)連接,j2ee 組件必須使用以下這些 jdbc 2.0 合用管理器接口:

        javax.sql.connectionpooldatasource 接口,該接口充當(dāng)合用的 java.sql.connection 對象的資源管理器連接 factory。每家數(shù)據(jù)庫服務(wù)器供應(yīng)商都提供該接口的實現(xiàn)

        (例如,oracle 實現(xiàn) oracle.jdbc.pool.oracleconnectionpooldatasource 類)。

        javax.sql.pooledconnection 接口,該接口封裝到數(shù)據(jù)庫的物理連接。同樣,數(shù)據(jù)庫供應(yīng)商提供其實現(xiàn)。

        對于那些接口和 xa 連接的每一個,都存在一個 xa(x/open 規(guī)范)等價定義。

        2. resultset

        在jdbc2.0中,為了獲得一個uptatable result,在query語句里必須包含primarykey,并且查詢的內(nèi)容里必須來自一個table

        ava.sql.resultset接口中定義了三種類型的結(jié)果集

        type_forward_only

        type_scroll_insensitive 這種類型的結(jié)果集支持雙向滾動

        type_scroll_sensitive

        如果要建立一個雙向滾動的resultset,一定要在建立statement的時候使用如下參數(shù)

        statement stmt = conn.createstatement(resultset.type_scroll_insensitive,

        resultset.concur_read_only);

        3. jdbc驅(qū)動程序

        連通oracle8.1.6的jdbc 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

        把oracle8.1.6/lib/jdbc/*.zip copy 到 %java_home%/jre/lib/ext/*.jar

        如果光copy不ren為.jar是沒有用的。

        4. 事務(wù)處理

        本地事務(wù)

        java.sql.connection接口可以控制事務(wù)邊界(即開始和結(jié)束)。

        在事務(wù)開始的時候調(diào)用setautocommit( false ), 而在中止事務(wù)時調(diào)用rollback或commit方法。這類事務(wù)叫本地事務(wù)。

        分布式事務(wù)

        但是,在特定的情況下,可能有多個客戶(例如兩個不同的servlet或ejb組件)參與了同一個事務(wù)。

        或者,客戶在同一個事務(wù)中可能會執(zhí)行跨越多個數(shù)據(jù)庫的數(shù)據(jù)庫操作。

        jdbc2.0 optional package 同jta一起來實現(xiàn)分布式樣事務(wù)。

        5. 一些技巧

        檢索自動產(chǎn)生的關(guān)鍵字

        為了解決對獲取自動產(chǎn)生的或自動增加的關(guān)鍵字的值的需求,jdbc 3.0 api 現(xiàn)在將獲取這種值變得很輕松。要確定任何所產(chǎn)生的關(guān)鍵字的值,只要簡單地在語句的 execute 方法中指定一個可選的標(biāo)記,表示您有興趣獲取產(chǎn)生的值。您感興趣的程度可以是 statement.return_generated_keys,也可以是 statement.no_generated_keys。在執(zhí)行這條語句后,所產(chǎn)生的關(guān)鍵字的值就會通過從 statement 的實例方法 getgeneratedkeys 來檢索 resultset 而獲得。resultset 包含了每個所產(chǎn)生的關(guān)鍵字的列。清單 1 中的示例創(chuàng)建一個新的作者并返回對應(yīng)的自動產(chǎn)生的關(guān)鍵字。

        清單 1. 檢索自動產(chǎn)生的關(guān)鍵字

        statement stmt = conn.createstatement;

        // obtain the generated key that results from the query.

        stmt.executeupdate("insert into authors " +

        '(first_name, last_name) " +

        "values ('george', 'orwell')",

        statement.return_generated_keys);

        resultset rs = stmt.getgeneratedkeys;

        if ( rs.next ) {

        // retrieve the auto generated key(s).

        int key = rs.getint;

        }

        jta/jts

        1.jta/jts基本知識

        服務(wù)器實現(xiàn)jts是否對應(yīng)用程序開發(fā)人員來說不是很重要的。

        對你來說,應(yīng)該把jta看作是可用的api。

        jta是用來開發(fā)distributed tansaction的 api.

        而jts定義了支持jta中實現(xiàn)transaction manager 的規(guī)范。

        javatransaction service (jts) specifies the implementation of a transaction manager which supports the java transaction api (jta) 1.0 specification at the high-level and implements the java mapping of the omg object transaction service (ots) 1.1 specification at the low-level. jts uses the standard corba orb/ts interfaces and internet inter-orb protocol (iiop) for transaction context propagation between jts transaction managers.

        a jts transaction manager provides transaction services to the parties involved in distributed transactions: the application server, the resource manager, the standalone transactional application, and the communication resource manager (crm).

        2.jta

        1.1 事務(wù)處理的概念

        jta實際上是由兩部分組成的:一個高級的事務(wù)性客戶接口和一個低級的 x/open xa接口。

        我們關(guān)心的是高級客戶接口,因為bean可以訪問它,而且是推薦的客戶應(yīng)用程序的事務(wù)性接口。

        低級的xa接口是由ejb服務(wù)器和容器使用來自動協(xié)調(diào)事務(wù)和資源(如數(shù)據(jù)庫)的

        1.1.1事務(wù)劃分

        a.程序劃分

        使用usertransaction啟動jta事務(wù)

        the usertransaction interface defines the methods that allow an application to explicitly manage transaction boundaries.(from j2ee api

        document)

      java讀書心得 篇3

        這個寒假我讀了《查理和巧克力工廠》,這本書生動有趣,書中查理。巴克特家很窮,連飯都吃不飽。他們家還有四個老人,分別是小查理的爺爺、奶奶、姥姥、姥爺,他們實在太老了,站都站不起來。

        在他們家能看到的地方有一個大巧克力工廠,那個工廠的主人是威利。旺卡先生。小查理非常好奇威利旺卡先生制作的巧克力,也非常喜歡吃巧克力糖。但他家里窮,平時根本吃不到。只有他每年過生日的時候,他的爸爸媽媽才會給他買一塊巧克力糖。

        有一次,旺卡先生舉行了一金獎券活動,得到金獎券的人可以參觀巧克力工廠,并得到一輩子都吃不完的巧克力。但只有五名幸運的小朋友可以得到,這五個金獎券都放在普通巧克力糖紙里面。

        最終,小查理跟另外四位幸運兒得到了金獎券。于是五個小朋友一起去參觀工廠。在參觀過程中,有四個小朋友因為看到那些極有誘惑力的巧克力景象而觸范了威利。旺卡設(shè)定的規(guī)矩,最終沒能參觀完工廠就被淘汰了,只有小查理走到了最后。

        原來,威利。旺卡先生是想通過這次參觀工廠的活動為自己找巧克力工廠的繼承人,他發(fā)現(xiàn)小查理不受誘惑,堅持原則,正是自己要找的人,于是把巧克力工廠送給了小查理。

        通過這個故事,讓我感覺到,做一個懂事、守規(guī)矩的人是多么的重要,不守規(guī)矩最終會害了自己,遵守規(guī)矩自己也會從中受益。

      java讀書心得 篇4

        有一句名言這樣寫道:世界上沒有比友誼更完美、更令人愉快的東西了;沒有友誼,世界仿佛失去了太陽。這讓使我想起了最近我讀完的一本書——《我親愛的甜橙樹》,它讓我懂得了一個道理:沒有友誼的世界是無味的,友誼是不會因為死亡而分開的。

        故事中的葡萄牙人“老葡”和一棵甜橙樹是書中主人公澤澤最好的朋友。老葡曾是澤澤的“敵人”,因為扒車,老葡以前狠狠揍了他的屁股,他也發(fā)誓要“殺了他”。有一天,澤澤被玻璃扎傷了腳,被細(xì)心的老葡發(fā)現(xiàn)了,老葡就帶澤澤清除了傷口。之后,澤澤悄悄地去找老葡,跟他談自己的種種奇思異想,跟著老葡一齊去郊游……漸漸地他們成了一對真正的、永久的朋友,他們一齊承諾,一齊履行承諾。澤澤的另一個好朋友們是他的甜橙樹——明基諾。當(dāng)澤澤心里有委屈時,他總是去找那棵甜橙樹,向它傾訴煩惱,訴說痛苦。

        自從澤澤有了這份令人珍惜的友誼后,他漸漸發(fā)現(xiàn),原先現(xiàn)實生活中也能感受到溫暖與愛,他因此變得“對一切都溫柔”,他也不再搞惡作劇了,他努力使自己轉(zhuǎn)成一個好孩子。就在他滿懷期望的時候,不幸的消息突然來臨:先是因為修路而要砍掉小甜橙樹,之后老葡突遇車禍,當(dāng)最好的兩個朋友突然離開的時候,澤澤因悲哀過度而發(fā)燒昏迷。最后有一天當(dāng)澤澤康復(fù)時,老葡已不在,小甜橙樹也成了一棵普通的小樹,然而在澤澤的心靈深處依然把老葡和小甜橙樹當(dāng)作他最好的朋友,他們一齊發(fā)現(xiàn)的事仍然是他幻想世界里最美的記憶。

        讀著讀著,我覺得現(xiàn)實生活中的友誼也是無處不在的,真摯的友誼就在我身邊,同桌汪辰陽和我之間的友情就是十分珍貴的。以前,我不怎樣喜歡他,因為他常常和同桌吵架。但是,自從我們成為了同桌之后,就改變了對他的看法。記得有一次,我上美術(shù)課忘帶了要用的材料,急得像熱鍋上的螞蟻,團團轉(zhuǎn)。汪辰陽仿佛看穿了我的心思,就關(guān)心地對我說:“你這天是不是沒有帶美術(shù)材料?我多帶了,我們一齊用吧!”聽了之后,一陣溫暖涌上心頭,我連忙說:“謝謝!謝謝!”而他卻輕描淡寫地回答:“我們是同桌,還是朋友,這是就應(yīng)的!”聽了這句樸實的話,讓我更覺得朋友就是當(dāng)對方遇到困難時,毫不猶豫地伸出手來幫對方一把。于是,我告訴自己,如果有一天他碰到困難我也要像他那樣,熱情地幫忙。

        我有困難,你幫忙;你有困難,我解決,人間將是多么溫馨阿。有一次課間,我發(fā)現(xiàn)他正眉頭緊皺,坐在那兒仿佛在思索什么似的。我就輕輕地用手肘碰了碰他:“你怎樣了?是不是有題目不會做阿?讓我來看看!”他“嗯”了一聲,我看了看題目,正好是我解過的題,我就耐心、詳細(xì)地把答題步驟一遍一遍地講給他聽,直到他聽懂為止,幫忙他攻克了這道“難題”。這天他不但提前完成了訂正作業(yè),而且還多做了課外作業(yè)。放學(xué)的時候,他向我表示感謝,我說:“不用謝,我們是朋友嘛!”當(dāng)我們一前一后走在放學(xué)的路上時,我的情緒是那樣的愉快,真是:贈人玫瑰,手有余香。這更加使我明白了友情的珍貴,友誼的價值。還有一次,已經(jīng)放學(xué)了,但是天空還下著大雨。我沒帶傘,在走廊上團團轉(zhuǎn),陳熙言仿佛看穿了我的心思,她走過來說:“你沒帶傘吧!我?guī)Я藘砂眩杞o你一把!”就掏出傘,遞給我。我接過傘,忙說:“謝謝你!你真是雪中送炭阿!謝謝了!”當(dāng)我走在放學(xué)的路上時,我的心是那樣的溫暖。我想:以后我也要多多幫忙他人使自己也溫暖到他人!

        無論從《我親愛的甜橙樹》的主人公澤澤身上,還是從我自己身邊所發(fā)生的點滴友情小故事,讓我深深明白:每個人都有朋友,朋友之間存在著友情,我們就應(yīng)珍惜這樣的友情,沒有友誼的生活毫無好處,陽光般溫暖的友情之花開遍整個世界。

      java讀書心得 篇5

        給孩子買了好幾本童話故事書,今天講到格林童話我想大家都看過,其中的青蛙王子。故事內(nèi)容大意是:一位公主在井邊玩耍,不小心,她的金球掉到井里,自己又沒辦法去撈,只好哭泣。這時從井里鉆出一只丑陋的大青蛙,說愿意幫公主把球撈上來,但從今往后要合公主同桌吃飯、同床睡覺,公主答應(yīng)了。可是當(dāng)球撈上來后,公主卻不想兌現(xiàn)自己的諾言。但國王卻堅持說:“你不管答應(yīng)了什么,都得辦到。”公主只好豪不情愿地依從。就在青蛙上床睡覺時,公主抓起它狠狠往墻上一摔,想叫青蛙吃吃苦頭,沒想到,奇跡發(fā)生了,青蛙被公主一摔,變成了英俊的王子,他們結(jié)了婚,成了恩愛夫妻。我想,如果公主說話不算數(shù),她也不會有最后的幸福,所以說,欺騙和不守信用的人不會有好結(jié)果,一諾千金才是做人的本分。 再說,國王就是國王,他要自己的女兒說話算數(shù),說明他本人更是金口玉言,不然怎么會當(dāng)上國王呢? 也許有人問:假如青蛙不變成王子,那不苦了公主?當(dāng)然這是有可能的,實際上人世間青蛙變王子的事畢竟很少,

        所以,公主在事先就應(yīng)當(dāng)考慮到這一點,如果你愿意犧牲自己去換取金球,你就答應(yīng)青蛙,否則就不要輕易承諾。要估計到將來任何事情都有可能發(fā)生,抱著僥幸心或者耍什么詭計,往往沒有好結(jié)果。

      java讀書心得(通用5篇) 相關(guān)內(nèi)容:
      • 讀書心得體會1500字十篇

        想想看:在清閑午后,在落日黃昏,品一杯清茶,翻開手中的書卷,看親情如燈,在悄無聲息中照亮生命的每一個角落,直至潸然淚下;品人生似棋,在無常生活中執(zhí)一顆平常心,看云卷云舒,花開花落。...

      • 讀書心得體會100字十篇

        讀《城南舊事》有了一種既陌生又熟悉的感覺,陌生是因為并沒有覺得曾經(jīng)讀過這本書,熟悉源于一些零星的片斷開始在大腦閃現(xiàn)越來越清晰,隨著憶的迫近,現(xiàn)原來真的曾經(jīng)讀過里面的一些只字片語,更確切的說是《我們看海去》的章節(jié),當(dāng)然我依...

      • 讀書心得體會150字十篇

        《草房子》連著幾天的陰雨綿綿,讓我讀完了《草房子》這本書。主要寫了男孩桑桑在油麻地的六年小學(xué)生活。在這六年中,他歷經(jīng)了許多看似尋常但又催人淚下、撼動人心的故事。...

      • 讀書心得體會格式十篇

        我讀了很多書,感受過走過這座橋,我便可以走向了知識彼岸的快樂。記得去年,我曾每日捧著《走讀中國》不肯放下,這是一本我認(rèn)為能給我?guī)碡S富知識和營養(yǎng)大餐的好書,在書中我不僅可以看到那么多文學(xué)大師的篇篇美文,更可以跟著他們的文...

      • 讀書心得體會1000字十二篇

        《現(xiàn)代小學(xué)英語教師素養(yǎng)》這是一本集小學(xué)英語教師綜合教學(xué)技能指導(dǎo)的教材,課堂用語篇針對英語教師語言基本功要求,編寫了英語課堂常用語,如:課前準(zhǔn)備,課中提問,教師指令、演示、評價語言等,指導(dǎo)教師準(zhǔn)確并流利地運用英語組織教學(xué)。...

      • 讀書心得體會800字十三篇

        青春是一支交響樂,音符中透著激情與希望;青春是一幅印象畫,點染間閃著活力與奔放。青春是一江東流水,在朝陽的光輝下蕩漾;青春是一艘七彩船,在風(fēng)雨的洗禮中遠(yuǎn)航。青春,需要用經(jīng)典來扮靚。...

      • 讀書的心得體會200字十五篇

        晚上,星星對我眨起了眼睛,我拿起《窗邊的小豆豆》,津津有味地看了起來。這本書的作者是日本著名的作家黑徹柳子,這本書主要講了小豆豆的新學(xué)校巴學(xué)園的樣子。《窗邊的小豆豆》這本書里面介紹的學(xué)校給我留下了深刻的印象。...

      • 讀書心得體會作文十篇

        長亭外,古道邊,芳草碧連天一滴清水,可以折射太陽的光輝;一本好書,可以凈化一個人的靈魂。題記古城的殘片,大樹的幾根重落枝條,臨街老店被涂蓋得字號,半扇院門的插閂以及那些美好的回憶都一一浮現(xiàn)在我眼前。...

      • 關(guān)于讀書的心得體會十篇

        提起作文教學(xué),我想很多老師都和我一樣在平時教學(xué)中有所抱怨。而我自己,也常常為怎樣進行作文教學(xué)、切實提高學(xué)生習(xí)作水平而苦惱。今日,拜讀了由張文質(zhì)、竇桂梅老師主編的《小學(xué)語文名師作文課堂實錄》,猶如醍醐灌頂,豁然開朗。...

      • 讀書的心得體會400字十五篇

        我讀了《中國民間故事》,里面有許多故事,可以告訴我們許多道理,比如:嫦娥奔月,海力布,八仙過海,媽祖娘娘等。我給你們講一個故事吧,這個故事的名字是海力布。有一個獵人,叫海力布。他受到鄉(xiāng)親們的尊重。...

      • 讀書心得體會范文大全十篇

        非常有幸我讀到了李志敏博士的《做最好的自己》這本書,讀完整本書后,感覺自己收獲了很多,自己的心靈也重新得到了洗禮。我國偉大詩人杜甫說過:讀書破萬卷,下筆如有神。高爾基曾說過:書是人類的進步階梯。...

      • 讀書心得體會500字十三篇

        我呢,從小就不愛讀文字較多的書籍,因為我覺得讀書不如看動畫片,動畫片有趣、好看,而看書卻很乏味。那時候,我心里有個幼稚可笑的想法:書是一件玩具。...

      • 讀書心得體會200字十篇

        《城南舊事》《城南舊事》是著名女作家林海音的自傳體小影,以其七歲到十三歲的生活為背景的一部長篇小說,也可視作她的代表作。它描寫二十世紀(jì)二十年代,北京城南一座四合院里,住著英子溫暖和樂的一家。...

      • 讀書心得體會400字十一篇

        今天讀了《水滴石穿》這篇成語故事,感慨很深,水滴石穿這句話是宋朝一位為官清廉正直的縣令張乖崖所說。主要講了管理倉庫小吏從倉庫里出來,把一枚銅錢放進口袋,被張乖崖發(fā)現(xiàn),立刻把它抓來,小吏不服氣張乖崖,提筆寫下:一日一錢,千...

      • 讀書心得體會300字十一篇

        當(dāng)我翻開《假如給我三天光明》,我心里是三分驚喜七分好奇。然而當(dāng)我翻完這本書中每珍貴的一頁,我心中是洶涌彭湃的,又是惆悵萬千的。它帶給我的是驚訝,是感動,更是一種強大的精神力量震撼著我。...

      • 讀書心得體會
      主站蜘蛛池模板: 奇米影视7777久久精品| 亚洲欧美日韩综合一区在线| www亚洲精品| 2021国产精品视频网站| 久久综合色之久久综合色| 秋霞电影院午夜无码免费视频| 国产精品美女久久久久久麻豆| 亚洲av免费成人在线| 午夜福利影院不卡影院| 性欧美牲交在线视频| 欧美激情一区二区| 麻豆果冻国产剧情av在线播放| 亚洲国产成人综合自在线| 亚洲综合精品一区二区三区| 人妻av中文字幕无码专区| 久久精品亚洲中文无东京热| 久久人妻少妇嫩草av无码专区| 久热在线中文字幕色999舞| 中国少妇人妻xxxxx| 国产一区二区爽爽爽视频| 好先生在线观看免费播放| 无码日韩av一区二区三区| 韩城市| 久久99久国产麻精品66| 中国少妇人妻xxxxx| 国产综合色产在线精品| 2021国产成人精品久久| 国产熟女激情一区二区三区| 九九热精品在线观看| 亚洲不卡一区二区在线看| 男女性杂交内射女bbwxz| 少妇高潮激情一区二区三| 亚洲av成人无码天堂| 66亚洲一卡2卡新区成片发布| 亚洲成A人片在线观看无码不卡| 国产在线观看码高清视频| 又粗又硬又黄a级毛片| 秋霞人妻无码中文字幕| 狠狠干| 国产一卡2卡三卡4卡免费网站| 亚洲av伊人久久综合性色|