日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java安全管理器

發(fā)布時(shí)間:2025/3/8 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java安全管理器 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

總的來(lái)說(shuō),Java安全應(yīng)該包括兩方面的內(nèi)容,一是Java平臺(tái)(即是Java運(yùn)行環(huán)境)的安全性;二是Java語(yǔ)言開(kāi)發(fā)的應(yīng)用程序的安全性。由于我們不是Java本身語(yǔ)言的制定開(kāi)發(fā)者,所以第一個(gè)安全性不需要我們考慮。其中第二個(gè)安全性是我們重點(diǎn)考慮的問(wèn)題。

一般我們可以通過(guò)安全管理器機(jī)制來(lái)完善安全性,安全管理器SecurityManager是安全的實(shí)施者,可對(duì)此類進(jìn)行擴(kuò)展,它提供了加在應(yīng)用程序上的安全措施,通過(guò)配置安全策略文件達(dá)到對(duì)網(wǎng)絡(luò)、本地文件和程序其它部分的訪問(wèn)限制的效果。

Java在應(yīng)用層為我們提供了安全管理器,每個(gè)Java應(yīng)用都可以擁有自己的安全管理器,它會(huì)在運(yùn)行階段檢查需要保護(hù)的資源的訪問(wèn)權(quán)限及其它規(guī)定的操作權(quán)限,保護(hù)系統(tǒng)免受惡意操作攻擊,以達(dá)到系統(tǒng)的安全策略。如圖展示了安全管理器的工作機(jī)制,當(dāng)運(yùn)行Java程序時(shí),安全管理器會(huì)根據(jù)policy文件所描述的策略給程序不同模塊分配權(quán)限,假設(shè)把應(yīng)用程序分成了三塊,每塊都有不同的權(quán)限,第一塊有讀取某文件的權(quán)限,第二塊同時(shí)擁有讀取某文件跟內(nèi)存的權(quán)限,第三塊有監(jiān)聽(tīng)socket的權(quán)限。通過(guò)這個(gè)機(jī)制就能很好地控制程序各個(gè)部分的各種操作權(quán)限,從應(yīng)用層上為我們提供了安全管理策略。

下圖為安全管理器對(duì)文件操作進(jìn)行管理的工作過(guò)程,當(dāng)應(yīng)用程序要讀取本地文件時(shí),securitymanager就會(huì)在讀取前進(jìn)行攔截,判斷是否有讀取此文件的權(quán)限,如果有則順利讀取,否則將拋出訪問(wèn)異常。SecurityManager類中提供了很多檢查權(quán)限的方法,例如checkPermission方法會(huì)根據(jù)安全策略文件描述的權(quán)限對(duì)操作進(jìn)行判斷是否有操作權(quán)限,而checkRead方法則用于判斷對(duì)文件訪問(wèn)權(quán)限。一旦發(fā)現(xiàn)沒(méi)有權(quán)限都會(huì)拋出安全異常。

一般而言,Java程序啟動(dòng)時(shí)并不會(huì)自動(dòng)啟動(dòng)安全管理器,可以通過(guò)以下兩種方法啟動(dòng)安全管理器:

  • 一種是隱式,啟動(dòng)默認(rèn)的安全管理器最簡(jiǎn)單的方法就是:直接在啟動(dòng)命令中添加-Djava.security.manager參數(shù)即可。
  • 一種是顯式,實(shí)例化一個(gè)java.lang.SecurityManager或繼承它的子類的對(duì)象,然后通過(guò)System.setSecurityManager()來(lái)設(shè)置并啟動(dòng)一個(gè)安全管理器。

在啟動(dòng)安全管理器時(shí)可以通過(guò)-Djava.security.policy選項(xiàng)來(lái)指定安全策略文件。如果沒(méi)有指定策略文件的路徑,那么安全管理器將使用默認(rèn)的安全策略文件,它位于%JAVA_HOME%/jre/lib/security目錄下面的java.policy。需要說(shuō)明一下的是,=表示這個(gè)策略文件將和默認(rèn)的策略文件一同發(fā)揮作用;==表示只使用這個(gè)策略文件。policy文件包含了多個(gè)grant語(yǔ)句,每一個(gè)grant描述某些代碼擁有某些操作的權(quán)限。在啟動(dòng)安全管理器時(shí)會(huì)根據(jù)policy文件生成一個(gè)Policy對(duì)象,任何時(shí)候一個(gè)應(yīng)用程序只能有一個(gè)Policy對(duì)象。

那么如何才能實(shí)現(xiàn)自己的安全管理器,并且配置權(quán)限呢?下面將通過(guò)一個(gè)簡(jiǎn)單的例子闡明實(shí)現(xiàn)步驟,一般可以分為以下兩步:
1. 創(chuàng)建一個(gè)SecurityManager子類,并根據(jù)需要重寫(xiě)一些方法。
2. 根據(jù)應(yīng)用程序代碼的權(quán)限需要配置策略文件。如果使用默認(rèn)安全管理器則省略第一步,下面用個(gè)例子說(shuō)明安全管理器的使用:

public class SecurityManagerTest {public static void main(String[] args)throws FileNotFoundException {System.out.println("SecurityManager: " + System.getSecurityManager());FileInputStreamfis = new FileInputStream("c:\\protect.txt");System.out.println(System.getProperty("file.encoding"));} }

分下面幾種情況運(yùn)行程序:

  • 假如不添加啟動(dòng)參數(shù)直接運(yùn)行,則相當(dāng)于沒(méi)有啟動(dòng)安全管理器,SecurityManager打印出來(lái)為null,且能正確讀取protect.txt文件跟file.encoding屬性。
  • 添加啟動(dòng)參數(shù)-Djava.security.manager-Djava.security.policy=c:/protect.policy,倆參數(shù)分別代表啟動(dòng)默認(rèn)安全管理器和指明策略配置文件路徑。此時(shí)SecurityManager打印出來(lái)為不為null,但由于此時(shí)protect.policy里面并沒(méi)有做任何授權(quán),所以在讀取文件的時(shí)就拋出AccessControlExcepti on異常。
  • 在protect.policy文件添加以下授權(quán)語(yǔ)句,此時(shí)SecurityManager不為空,并且有權(quán)限讀取protect.txt文件,但最終還是會(huì)拋一個(gè)AccessControlException異常,因?yàn)椴](méi)有權(quán)限讀取file.encoding系統(tǒng)屬性。
grant {permissionjava.io.FilePermission "c:/protect.txt", "read"; };
  • 將protect.policy授權(quán)語(yǔ)句改為如下,這次讀取文件跟讀取系統(tǒng)屬性的權(quán)限都有了,程序正常運(yùn)行,不再拋出安全異常。
grant {permissionjava.io.FilePermission "c:/protect.txt", "read";permissionjava.util.PropertyPermission "file.encoding", "read"; };

由上面幾種情況我們清晰了解安全管理器的使用,通過(guò)簡(jiǎn)單地配置策略文件能達(dá)到應(yīng)用安全的管理。Java的Permission類是用來(lái)定義類所擁有的權(quán)限,Java本身包括了一些 Permission類,如下:

Permission權(quán)限
java.security.AllPermission所有權(quán)限的集合
java.util.PropertyPermission系統(tǒng)/環(huán)境屬性權(quán)限
java.lang.RuntimePermission運(yùn)行時(shí)權(quán)限
java.net.SocketPermissionSocket權(quán)限
java.io.FilePermission文件權(quán)限,包括讀寫(xiě),刪除,執(zhí)行
java.io.SerializablePermission序列化權(quán)限
java.lang.reflect.ReflectPermission反射權(quán)限
java.security.UnresolvedPermission未解析的權(quán)限
java.net.NetPermission網(wǎng)絡(luò)權(quán)限
java.awt.AWTPermissionAWT權(quán)限
java.sql.SQLPermission數(shù)據(jù)庫(kù)sql權(quán)限
java.security.SecurityPermission安全控制方面的權(quán)限
java.util.logging.LoggingPermission日志控制權(quán)限
javax.net.ssl.SSLPermission安全連接權(quán)限
javax.security.auth.AuthPermission認(rèn)證權(quán)限
javax.sound.sampled.AudioPermission音頻系統(tǒng)資源的訪問(wèn)權(quán)限

========廣告時(shí)間========

鄙人的新書(shū)《Tomcat內(nèi)核設(shè)計(jì)剖析》已經(jīng)在京東銷售了,有需要的朋友可以到 https://item.jd.com/12185360.html 進(jìn)行預(yù)定。感謝各位朋友。

為什么寫(xiě)《Tomcat內(nèi)核設(shè)計(jì)剖析》

=========================

歡迎關(guān)注:

總結(jié)

以上是生活随笔為你收集整理的Java安全管理器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。