博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中的SecurityManager类
阅读量:3901 次
发布时间:2019-05-23

本文共 2472 字,大约阅读时间需要 8 分钟。

安全管理器是一个允许应用程序实现安全策略的类。它允许应用程序在执行可能不安全或敏感的操作之前确定该操作是什么,以及是否在允许执行该操作的安全上下文中尝试该操作。应用程序可以允许或不允许该操作。

SecurityManager类包含许多名称以单词check开头的方法。在这些方法执行某些潜在的敏感操作之前,Java库中的各种方法都会调用这些方法。这种检查方法的调用通常如下所示:

SecurityManager security = System.getSecurityManager();

if (security != null) {
security.checkXXX(argument, . . . );
}
因此,安全管理器有机会通过抛出异常来阻止操作的完成。如果允许该操作,安全管理器例程只返回,但如果不允许该操作,则抛出SecurityException。此约定的唯一例外是checktoplevelwindow,它返回一个布尔值。

当前安全管理器由类系统中的setSecurityManager方法设置。当前的安全管理器是通过getsecuritymanager方法获得的。

特殊方法checkpermission(java.security.permission)确定是否应授予或拒绝由指定权限指示的访问请求。默认实现调用

AccessController.checkPermission(perm);

如果允许请求的访问,则checkpermission将悄悄返回。如果拒绝,则引发SecurityException。

从Java2SDKv1.2开始,SecurityManager中其他每个检查方法的默认实现是调用SecurityManager检查权限方法,以确定调用线程是否具有执行请求操作的权限。

注意,只有一个permission参数的checkpermission方法总是在当前执行线程的上下文中执行安全检查。有时,应该在给定上下文中执行的安全检查实际上需要在不同上下文中执行(例如,在工作线程中)。在这种情况下,将提供getSecurityContext方法和包含上下文参数的checkPermission方法getSecurityContext方法返回当前调用上下文的“快照”。(默认实现返回AccessControlContext对象。)下面是一个示例调用:

Object context = null;

SecurityManager sm = System.getSecurityManager();
if (sm != null) context = sm.getSecurityContext();

checkPermission方法除了获取权限之外还获取一个上下文对象,它根据该上下文而不是当前执行线程的上下文做出访问决策。因此,不同上下文中的代码可以调用该方法,传递权限和先前保存的上下文对象。使用前面示例中获得的securitymanager sm的示例调用如下:

if (sm != null) sm.checkPermission(permission, context);

权限分为以下类别:文件、套接字、网络、安全性、运行时、属性、awt、反射和可序列化。管理这些不同权限类别的类有java.io.FilePermission、java.net.SocketPermission、java.net.net permission、java.security.SecurityPermission、java.lang.RuntimePermission、java.util.PropertyPermission、java.awt.awtppermission、java.lang.reflect.reflectppermission和java.io.serializablepmission。

除了前两个(FilePermission和SocketPermission)之外,其余都是java.security.BasicPermission的子类,它本身是权限顶级类java.security.Permission的抽象子类Basic权限定义了所有权限的功能,这些权限包含遵循分层属性命名约定的名称(例如,“EXITVM”、“StEngStand”、“QuealPrimtPo作业”等)。星号可以出现在名称的末尾,在“.”后面,或者它本身表示通配符匹配。例如:“a.”或“”有效,“a”或“ab”无效。

filePermission和socketPermission是顶级权限类(java.security.permission)的子类。这些类的名称语法比basicpermission子类直接从权限而不是basicpermission使用的名称语法更复杂。例如,对于java.io.filePermission对象,权限名称是文件(或目录)的路径名。

一些权限类有一个“操作”列表,它告诉对象允许的操作。例如,对于java.io.filePermission对象,操作列表(例如“读、写”)指定为指定文件(或指定目录中的文件)授予哪些操作。

其他权限类用于“命名”权限-那些包含名称但没有操作列表的权限;您要么拥有命名权限,要么没有。

注意:还有一个java.security.all permission权限表示所有权限。它的存在是为了简化系统管理员的工作,这些系统管理员可能需要执行需要所有(或多个)权限的多个任务。

有关权限的信息,请参阅JDK中的权限例如,此文档包含一个表,其中列出了各种SecurityManager检查方法以及每个此类方法的默认实现所需的权限它还包含一个包含所有需要权限的1.2版方法的表,对于每个这样的方法,它都会告诉您它需要哪些权限。

有关在jdk中进行的securitymanager更改的更多信息以及有关移植1.1风格安全管理器的建议,请参阅安全文档。

转载地址:http://stken.baihongyu.com/

你可能感兴趣的文章
IOS 一些好的框架和 技术大牛的博客
查看>>
Java 和 Object-c的区别
查看>>
Windows环境下Android NDK环境搭建
查看>>
NDK Build 用法(NDK Build)
查看>>
Android NDK开发起步Hello Jni
查看>>
[已解决]AutoCompleteTextView 不显示匹配的内容,因为将空的内容添加进去了
查看>>
object c的浅拷贝(地址拷贝)和深拷贝(对象拷贝)
查看>>
object c son字符串的解析
查看>>
object c 非常强大的类的属性复制kcv键值码赋值
查看>>
Java中普通代码块,构造代码块,静态代码块区别及代码示例
查看>>
iOS 第4课 UILabel
查看>>
[已解决]junit.framework.AssertionFailedError: No tests found in
查看>>
“服务器端跳转”和“客户端跳转”的区别
查看>>
Datatables基本初始化——jQuery表格插件
查看>>
Servlet监听器——实现在线登录人数统计小例子
查看>>
Oracle笔记——简单查询语句 Oracle入门
查看>>
基于Hibernate和Struts2的用户管理系统小案例
查看>>
打开.class文件的方法
查看>>
基于windows平台Git+GitHub+Hexo搭建个人博客(一)
查看>>
基于windows平台Git+GitHub+Hexo搭建个人博客(二)
查看>>