【Online Judge】3.安全管理器

SecurityManager

先看说明书…JDK文档的解释如下:

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

SecurityManager 类包含了很多名称以单词 check 开头的方法。
Java 库中的各种方法在执行某些潜在的敏感操作前可以调用这些方法。
对 check 方法的典型调用如下: 

SecurityManager security = System.getSecurityManager();
if (security != null) {
   
    security.checkXXX(argument,  . . . );
}

checkPermission 方法使用一个上下文对象,以及根据该上下文而不是当前执行线程的上下文作出访问决策的权限。因此另一个上下文中的代码可以调用此方法,传递权限和以前保存的上下文对象。下面是一个示例调用,它使用了以前示例中获得的 SecurityManager sm

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

权限分为以下类别:文件、套接字、网络、安全性、运行时、属性、AWT、反射和可序列化。管理各种权限类别的类是 java.io.FilePermissionjava.net.SocketPermissionjava.net.NetPermissionjava.security.SecurityPermissionjava.lang.RuntimePermissionjava.util.PropertyPermissionjava.awt.AWTPermissionjava.lang.reflect.ReflectPermissionjava.io.SerializablePermission


有什么用?

一般来说我们写程序是用不到安全管理器的,因为我们只会执行我们自己写的代码,别人的?自己的时都没弄好还想着别人?

但是总会有特殊需求的时候,比如说早期Apple还很火的时候,在浏览器上你执行的是别人的代码、别人的 Java Apple小程序,你就得需要一个安全管理器,用于限制代码的执行权限。再比如说我们的OJ…


怎么用?

一般来说安全管理器默认是不开启的,我们要手动地开启,执行cmd命令 或下面的代码:

System.setSecurityManager(new SecurityManager());

这条代码会设置一个默认的安全管理器,具体的规则是写在一个文件里的,大概路径为:${java.home}/jre/security/java.policy

文件里面默认的内容是这样的:

// Standard extensions get all permissions by default

grant codeBase "file:${
   {java.ext.dirs}}/*" {
   
        permission java.security.AllPermission;
};


// default permissions granted to all domains

grant {
   
        // Allows any thread to stop itself using the java.lang.Thread.stop()
        // method that takes no argument.
        // Note that this permission is granted by default only to remain
        // backwards compatible.
        // It is strongly recommended that you either remove this permission
        // from this policy file or further restrict it to code sources
        // that you specify, because Thread.stop() is potentially unsafe.
        // See the API specification of java.lang.Thread.stop() for more
        
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值