1. 程式人生 > >java之jvm學習筆記九(策略檔案)

java之jvm學習筆記九(策略檔案)

                      什麼是java的策略,什麼又是策略檔案。

                      今天我換一下筆記的方式,不是直接講概念,而是先來做一個小例子,相信你做完這個例子之後再看我對例子的講解,你對策略,策略檔案,會豁然開朗的感覺。

                       例子很簡單,簡單的才是大家的,下面跟著我(你完全可以copy我的程式碼)。

                        第一步,定義一個簡單類。

package com.yfq.test;

import java.io.FileWriter;
import java.io.IOException;

public class TestPolicy {


		public static void main(String[] args) {
			FileWriter writer;
			try {
				writer = new FileWriter("d:/testPolicy.txt");
				writer.write("hello1");
				writer.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

}


                              第二步,定義一個簡單的策略檔案,我們放到工程的類路徑下(src資料夾裡),名字為myPolicy.txt

grant codeBase "file:D:/workspace/TestPolicy/bin/*" {   
    permission java.io.FilePermission "d:/testPolicy.txt", "read";   
}; 

我簡單的來說一下這個檔案的作用

第一行:grant codeBase "file:D:/workspace/TestPolicy/bin/*"意思是給D:/workspace/TestPolicy/bin/*給這個路徑下的所有檔案定義許可權,星號是統配符,所有的意思

第二行:permission java.io.FilePermission "d:/testPolicy.txt", "read";意思是d:/testPolicy.txt這個檔案 只分配讀的許可權。

                            第三步,執行,在cmd視窗輸入(執行不起來,說明jdk的環境變數沒有配置好,去配一下)
java -classpath D:/workspace/TestPolicy/bin -Djava.security.manager -Djava.security.policy=D:/workspace/TestPolicy/src/myPolicy.txt com.yfq.test.TestPolicy

這句話的意思,把當前的類路徑指定為D:/workspace/TestPolicy/bin,啟動預設的安全管理器(這裡你應該也猜到了,策略必須和安全管理器一起合作才能起作用),設定安全策略檔案的位置(關於策略檔案的安裝是有多種方式的,這裡我們是在windows下,如果你有興趣可以自己再多摸索)。

                           第四步,檢視輸出

這裡報出了異常,提示本應用對d:/testPolicy.txt這個檔案沒有寫的許可權。

修改一下上面的myPolicy.txt檔案,如下

grant codeBase "file:D:/workspace/TestPolicy/bin/*" {   
    permission java.io.FilePermission "d:/testPolicy.txt", "read,write";   
}; 

再次執行,沒有報錯了。

好了實驗成功,或許你會疑問,這個有鳥用啊,不要急,在下一節中,我們會詳細的講,現在我做一下簡單的介紹,這個策略檔案(本文中為myPolicy.txt)在java中對應著一個類,叫java.security.Policy(策略),這是一個神奇的類,有了它,你可以定義自己程式碼的許可權,當然它還可以結合我們筆記四講到的安全管理器。而你現在只需要記住一句話:

java對應用程式的訪問控制策略是由抽象類java.security.Policy的一個子類的單例所表示,任何時候,每個應用程式實際上只有一個Policy物件,Policy物件對應著策略檔案。類裝載器利用這個Policy物件來幫助他們決定,在把一段程式碼匯入虛擬機器時應該給予什麼許可權。

如果你之前有稍微聽過策略這個概念,希望看完本文有給你豁然開朗的感覺

申明:以上實驗有參照網上其他作者的內容,在此只做學習交流之用!          

writed by:keycoding

相關推薦

javajvm學習筆記(策略檔案)

                      什麼是java的策略,什麼又是策略檔案。                       今天我換一下筆記的方式,不是直接講概念,而是先來做一個小例子,相信你做完這個例子之後再看我對例子的講解,你對策略,策略檔案,會豁然開朗的感覺

javajvm學習筆記十(策略和保護域)

                       前面一節,我們做了一個簡單的實驗,來說明什麼是策略檔案,在文章的最後,也順帶的講了一下什麼是策略,還有策略的作用。                        為了引出另外一個很重要的概念ProtectionDomain(保

javajvm學習筆記三(Class檔案檢驗器)

               前面的學習我們知道了class檔案被類裝載器所裝載,但是在裝載class檔案之前或之後,class檔案實際上還需要被校驗,這就是今天的學習主題,class檔案校驗器。              class檔案 校驗器,保證class檔案內容有

javajvm學習筆記四(安全管理器)

               前面已經簡述了java的安全模型的兩個組成部分(類裝載器,class檔案校驗器),接下來學習的是java安全模型的另外一個重要組成部分安全管理器。                安全管理器是一個單獨的物件,在java虛擬機器中,它在訪問控

javajvm學習筆記十一(訪問控制器)

                 這一節,我們要學習的是訪問控制器,在閱讀本節之前,如果沒有前面幾節的基礎,對你來說可能會比較困難! 知識回顧:                   我們先來回顧一下前幾節的內容,在筆記三的時候我們學了類裝載器,它主

jvm學習筆記(三)類檔案結構、java方法數65535上限的原因

瞭解class類檔案結構,對於學習smali也是有必要的!一、class類檔案的結構(8位位元組,一個位元組佔8位,以位元組為基礎單位的二進位制流)儲存結構:class檔案是一組以位元組(8位)為基礎單位的二進位制流,各資料嚴格按照順序緊湊排列在class檔案中,中間沒有任何

Java 設計模式學習筆記1——策略模式(Duck例子)

利用 實例化 top 而是 實現 學習筆記 left ng- 多個 0、假設現有工程(Duck)中遇到為類添加功能的問題,如何設計類添加新的功能? 1、利用繼承提供的Duck(鴨子)的行為會導致哪些缺點? (1)代碼在多個子類中重復 (2)很多男知道所有鴨子的全部行為

javaJVM學習--基本機構

指向 ole 處理器 找到 對象實例化 內存空間 如何 周期 .com JDK,JRE,JVM關系圖 JVM所處的位置: JVM物理結構: jvm內存區詳解: 程序計數器 程序計數器(Program Counter Re

javaJVM學習--簡單理解編譯和運行的過程概覽

層次 概覽 聲明 是否 class 異常處理器 語義 net ots java代碼編譯流程圖: java字節碼執行由JVM執行引擎完成 Java代碼編譯和執行的整個過程包含了以下三個重要的機制: Java源碼編譯機制 類加載機制 類執

javaJVM學習--簡單了解GC算法

救贖 osgi -xms 查看類 nor blog 虛擬機棧 頻繁 lur JVM內存組成結構: (1)堆 所有通過new創建的對象都是在堆中分配內存,其大小可以通過-Xmx和-Xms來控制,堆被劃分為新生代和舊生代,新生代又被進一步劃分為Eden和Survivor

JVM學習筆記——Class類檔案解讀

簡述 Java原始碼通過編譯生成.class檔案位元組碼後再被JVM解釋轉化為目標機器程式碼,從而實現一次編寫到處,到處執行("Write Once,Run Anywhere")。位元組碼與平臺無關,而且並不是只有Java語言編譯為位元組碼檔案在虛擬機器上執行。 類檔案的

JVM學習筆記2:Class檔案格式

一:class檔案概述      Class檔案是JVM的輸入,Java虛擬機器規範中定義了Class檔案的結構。Class檔案是JVM實現平臺 無關、技術無關的基礎。       1:Class檔案是一組以8位元組為單位的位元組流,各個資料專案按順序緊湊排列      

設計模式學習筆記04--策略模式

-----謹以此文表明汪先生學過設計模式 1.策略模式     定義一組演算法,將每個演算法都封裝起來,並且使它們之間可以互換。     類圖:            ● Strategy抽象策略    策略、演算法家族的抽象,通常為介面,定義每個策略或演算法必須

javaJvm學習--JVM執行機制

有序性:在一個執行緒當中,所有的指令,所有的操作都是有序的。但是線上程外觀察,在多執行緒的情況下去觀察前面一個執行緒的行為,我們會發現這個行為有可能就是無序的(這種無序有兩種原因,一種就是指令重排,另一種就是主存同步的延時,也就是說線上程A中更改了一個變數的值,同步主存也成功了,但是線上程B中我們可能還沒來得

JAVA Redis 學習筆記(二) Redis的連線IP、埠號、連線密碼的修改以及與JAVA簡單互動

一、專案中引入Redis包              根據上一篇文章中給的jar包路徑,將jar包下載,匯入自己的專案。(jedis-2.7.2.jar) 二、與Redis連線  (1)連線IP和埠

Java虛擬機器學習筆記(5)——類檔案結構

          上一篇介紹了JVM物件的記憶體分配和回收策略。這篇接著介紹Java的類檔案結構,這篇的內容可能會比較多,我儘量循序漸進的講。要學習class的檔案結構,先要大體對class檔案結構有哪些內容有一個整體把握。現在,看下面一張表。           上面

Java for Web學習筆記):Servlet(7)上傳檔案

上傳檔案 Servlet的引數設定 採用annotation方式如下: @WebServlet( name = "TicketServlet", urlPatterns = {"/tickets"}, loadOnStartup = 1 ) /* MultipartConfig配置了本Servlet

JVM學習筆記6(策略檔案

前面說過關於策略檔案的內容,但是略過了很多東西(比如數字簽名之類的),現在補充說明一下策略檔案的結構。 1.策略檔案 策略檔案其實就是一個ASCII檔案,這個檔案最後會被用來生成Policy物件。檔案中要包含下列語句: grant [ SignedBy “signer_na

jvm學習筆記對象詳解

時間 分代 創建 com 詳解 要求 技術 wid src 一、對象的組成            對象頭(Header):           運行時數據:存儲對象運行時的數據,如哈希碼、GC分代年齡、鎖狀態標誌、線程持有的鎖、偏向線程ID、偏向時間戳等,這部分數據官方成為

java集合類學習筆記LinkList

prev strong 內部數據 ins 屬性 aced 裏的 row return 1、簡述     LinkList的底層其實就是一個雙向鏈表,所謂的鏈表就是一個LinkList內部靜態靜態類(Node),對LinkList的所有操作本質上就是通過對LinkList中新