不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學習啦 > 知識大全 > 知識百科 > 百科知識 > 什么是反射機制反射機制的安全性

什么是反射機制反射機制的安全性

時間: 謝君787 分享

什么是反射機制反射機制的安全性

  反射機制主要是指程序可以訪問、檢測和修改它本身狀態(tài)或行為的一種能力。那么你對反射機制了解多少呢?以下是由學習啦小編整理關于什么是反射機制的內(nèi)容,希望大家喜歡!

  反射機制的概念

  在計算機科學領域,反射是指一類應用,它們能夠自描述和自控制。也就是說,這類應用通過采用某種機制來實現(xiàn)對自己行為的描述(self-representation)和監(jiān)測(examination),并能根據(jù)自身行為的狀態(tài)和結(jié)果,調(diào)整或修改應用所描述行為的狀態(tài)和相關的語義。

  反射機制也被應用到了視窗系統(tǒng)、操作系統(tǒng)和文件系統(tǒng)中。 反射本身并不是一個新概念,它可能會使我們聯(lián)想到光學中的反射概念,盡管計算機科學賦予了反射概念新的含義,但是,從現(xiàn)象上來說,它們確實有某些相通之處,這些有助于我們的理解。同一般的反射概念相比,計算機科學領域的反射不單單指反射本身,還包括對反射結(jié)果所采取的措施。所有采用反射機制的系統(tǒng)(即反射系統(tǒng))都希望使系統(tǒng)的實現(xiàn)更開放。可以說,實現(xiàn)了反射機制的系統(tǒng)都具有開放性,但具有開放性的系統(tǒng)并不一定采用了反射機制,開放性是反射系統(tǒng)的必要條件。一般來說,反射系統(tǒng)除了滿足開放性條件外還必須滿足原因連接(Causally-connected)。所謂原因連接是指對反射系統(tǒng)自描述的改變能夠立即反映到系統(tǒng)底層的實際狀態(tài)和行為上的情況,反之亦然。開放性和原因連接是反射系統(tǒng)的兩大基本要素。

  Java中,反射是一種強大的工具。它使您能夠創(chuàng)建靈活的代碼,這些代碼可以在運行時裝配,無需在組件之間進行源代表鏈接。反射允許我們在編寫與執(zhí)行時,使我們的程序代碼能夠接入裝載到JVM中的類的內(nèi)部信息,而不是源代碼中選定的類協(xié)作的代碼。這使反射成為構(gòu)建靈活的應用的主要工具。但需注意的是:如果使用不當,反射的成本很高。

  反射機制的安全性

  在處理反射時安全性是一個較復雜的問題。反射經(jīng)常由框架型代碼使用,由于這一點,我們可能希望框架能夠全面接入代碼,無需考慮常規(guī)的接入限制。但是,在其它情況下,不受控制的接入會帶來嚴重的安全性風險,例如當代碼在不值得信任的代碼共享的環(huán)境中運行時。

  由于這些互相矛盾的需求,Java編程語言定義一種多級別方法來處理反射的安全性?;灸J绞菍Ψ瓷鋵嵤┡c應用于源代碼接入相同的限制:

  n 從任意位置到類公共組件的接入

  n 類自身外部無任何到私有組件的接入

  n 受保護和打包(缺省接入)組件的有限接入

  不過至少有些時候,圍繞這些限制還有一種簡單的方法。我們可以在我們所寫的類中,擴展一個普通的基本類java.lang.reflect.AccessibleObject 類。這個類定義了一種setAccessible方法,使我們能夠啟動或關閉對這些類中其中一個類的實例的接入檢測。唯一的問題在于如果使用了安全性管理器,它將檢測正在關閉接入檢測的代碼是否許可了這樣做。如果未許可,安全性管理器拋出一個例外。

  下面是一段程序,在TwoString 類的一個實例上使用反射來顯示安全性正在運行:

  public class ReflectSecurity {

  public static void main(String[] args) {

  try {

  TwoString ts = new TwoString("a", "b");

  Field field = clas.getDeclaredField("m_s1");

  //field.setAccessible(true);

  System.out.println("Retrieved value is " +field.get(inst));

  } catch (Exception ex) {

  ex.printStackTrace(System.out);

  } } }

  如果我們編譯這一程序時,不使用任何特定參數(shù)直接從命令行運行,它將在field .get(inst)調(diào)用中拋出一個IllegalAccessException異常。如果我們不注釋field.setAccessible(true)代碼行,那么重新編譯并重新運行該代碼,它將編譯成功。最后,如果我們在命令行添加了JVM參數(shù)-Djava.security.manager以實現(xiàn)安全性管理器,它仍然將不能通過編譯,除非我們定義了ReflectSecurity類的許可權限。
看過“反射機制的安全性”的人還看了:

1.java 反射調(diào)用set方法

2.社會拒絕的生理反應及理論解釋探討論文

3.早泄病的原因

4.高中生物基礎知識手冊

5.29歲右耳耳鳴怎么回事

6.淺議激光的生物學效應及生物物理機理探討

1595936