基本概念

安全管理器是一个负责控制具体操作是否允许执行的类,它主要负责检查的操作包括如下内容:

创建一个新的类加载器;

退出虚拟机

使用反射访问另一个类的成员

访问本地文件

打开socket连接

启动打印作业

访问系统剪贴板

打开一个顶层窗口

java.lang.SecurityManager类包含了很多checkXXXX方法,SecurityManager 中其他所有 check 方法的默认实现都是调用 SecurityManager checkPermission 方法来确定调用线程是否具有执行所请求操作的权限。

权限分为以下类别:文件、套接字、网络、安全性、运行时、属性、AWT、反射和可序列化。管理各种权限类别的类是 java.io.FilePermission、java.net.SocketPermission、java.net.NetPermission、java.security.SecurityPermission、java.lang.RuntimePermission、java.util.PropertyPermission、java.awt.AWTPermission、java.lang.reflect.ReflectPermission 和 java.io.SerializablePermission。

除前两个(FilePermission 和 SocketPermission)类以外的所有类都是 java.security.BasicPermission 的子类,而 java.security.BasicPermission 类又是顶级权限类 java.security.Permission 的抽象子类。

安全策略文件:

类装载器用Policy对象帮助它们决定,把一段代码导入虚拟机时应该给它们什么样的权限. 任何时候,每一个应用程序都只有一个Policy对象.

Sun的java1.2平台具体的Policy子类采用在一ASCII策略文件中用上下文无关文法描述安全策略.

一个策略文件包括了一系列grant子句,每一个grant子句将一些权限授给一个代码来源。

grant codesource

{

permission1;

permission2;

}

保护域(ProtectionDomain)

当类装载器将类型装入java虚拟机时,它们将为每一个类型指派一个保护域,保护域定义了授予 一段特定的代码的所有权限.装载入java虚拟机的每一个类型都属于一个且仅属于一个保护域.

访问控制器(AccessController)

mplies() 判断一个Permissioin对象的权限,是否隐含(imply)在另一个Permissioin对象的权限中。

checkPermission() AccessController的核心方法,这个方法决定一个特定的操作能否被允许. 它自顶向下检查栈,只要它遇到一个没有权限桢,它将抛出一个AccessControlException导常。

doPrivileged()有的时候,调用栈较上层(更靠近栈顶)的代码可能希望执行一段代码,而这段代码在调用栈的较下层是不允许执行的。为了使可信的代码执行较不可靠的代码操作(这段不可靠的代码位于调用栈的较下层且没有执行这个操作的权限),AccessController类重载了四个名为doPrivileged()的静态方法.

1:AccessController会忽略调用doPrivileged()方法的调用者的调用者的权限.

2:Permission: 权限是用抽象类java.security.Permission的一个子类的实例表示的.

3:CodeSource: 代码来源,包含代码库URL和签名者.

4: Permissions: PermissionCollection(权限集合)的子类

实例:判断用户是否可以读取文件

import java.io.*;

class UserSecurityManager extends SecurityManager {

private String passWord;

private String userName;

UserSecurityManager(String passWord,String userName) {

super();

this.passWord=passWord;

this.userName=userName;

}

private boolean accessOK() {

System.out.println("请输入用户名和密码,用逗号隔开");

BufferedReader dis = new BufferedReader(new InputStreamReader(System.in));

try {

String[] value=dis.readLine().split(",");

if (value[0].equals(userName)&&value[1].equals(passWord))

return true;

else

return false;

} catch (IOException e) {

return false;

}

}

public void checkRead(FileDescriptor filedescriptor) {

if (!accessOK())

throw new SecurityException("您没有读文件权限");

}

public void checkRead(String filename) {

if (!accessOK())

throw new SecurityException("您没有读文件权限");

}

public void checkRead(String filename, Object executionContext) {

if (!accessOK())

throw new SecurityException("您没有读文件权限");

}

public void checkWrite(FileDescriptor filedescriptor) {

if (!accessOK())

throw new SecurityException("您没有写文件权限!");

}

public void checkWrite(String filename) {

if (!accessOK())

throw new SecurityException("您没有写文件权限!");

}

}

import java.io.*;

public class TestSecurity

{

public static void main(String args[])

{

try {

System.setSecurityManager(new UserSecurityManager("123456","wang"));

} catch (SecurityException se) {

System.out.println("安全管理器启动,您需要输入用户名和密码才能继续操作");

}

try {

BufferedReader fis = new BufferedReader(new FileReader("input.txt"));

String inputString;

while ((inputString = fis.readLine()) != null) {

System.out.println(inputString);

}

fis.close();

} catch (IOException ioe) {

System.out.println("I/O 读取文件失败"+" "+ioe.getMessage());

}catch(Exception e)

{

System.out.println(e.toString());

}

}

运行结果:

输入不匹配用户名和密码:

请输入用户名和密码,用逗号隔开

zhang,1234

java.lang.SecurityException: 您没有读文件权限

输入正确的用户名和密码,成功读取文件信息。

请输入用户名和密码,用逗号隔开

wang,123456

hello word

java安全管理器视频_java安全-安全管理器相关推荐

  1. 异常将上下文初始化事件发送到类的侦听器实例._Java CLassLoader类加载器详解,一点课堂(多岸学院)...

    Java CLassLoader 类加载器(class loader)是 Java™中的一个很重要的概念.类加载器负责加载 Java 类的字节代码到 Java 虚拟机中.本文首先详细介绍了 Java ...

  2. java音乐播放器视频_java 实现音乐播放器的简单实例

    java 实现音乐播放器的简单实例 实现效果图: 代码如下 package cn.hncu.games; import java.applet.Applet; import java.applet.A ...

  3. java图片查看器下载_java照片查看器源代码

    java照片查看器源代码 package ioStream;import java.awt.AWTEvent;import java.awt.Color;import java.awt.Graphic ...

  4. java制作音乐播放器教程_Java音乐播放器的实现实例

    这篇文章主要介绍了java 实现音乐播放器的简单实例的相关资料,希望通过本文能帮助到大家,实现这样的功能,需要的朋友可以参考下 java 实现音乐播放器的简单实例 实现效果图: 代码如下 packag ...

  5. java音频播放器代码_java音乐播放器实现代码

    本文实例为大家分享了java音乐播放器的具体代码,供大家参考,具体内容如下 这个是源码结构介绍 这个是界面,有点简陋,见笑了,但是基本上的东西都有了,没办法,没有美工的程序写的界面 直接上源代码Pla ...

  6. java装饰模式模拟流_Java设计模式--装饰器模式到Java IO 流

    装饰器模式 抽象构件角色:给出一个抽象接口,以规范准备接受附加责任的对象. 具体构件角色:定义准备接受附加责任的对象. 抽象装饰角色:持有一个构件对象的实例,并对应一个与抽象构件接口一致的接口. 具体 ...

  7. java抢答器代码_java竞争抢答器

    /*实现一个竞拍抢答程序:要求设置三个抢答者(三个线程),而后同时发出抢答指令,抢答成功者显示成功提示,抢答失败者给出失败提示.*/ package Java多线程_01; import java.u ...

  8. java 正则比大小_Java:正则表达式模式匹配器是否有大小限制? - java

    我的模式类似于OR:"word1 | word2 | word3" 我大约有800个字. 可能有问题吗? 参考方案 您仅受记忆和理智的限制.

  9. java制作管理系统视频_java语言制作管理系统视频教程

    并且新的通过对象原型拷贝这些创建,制作的参一定考价具有值,制作细介型模相关文章为大T原家详这篇主要资料绍了式的,伴们小伙型实象的模式的定定创一下原型义:用原可以例指建对种类参考感兴趣的. 管理询速行人 ...

最新文章

  1. mongodb线程池_常用高并发网络线程模型设计及MongoDB线程模型优化实践
  2. 站在架构师的角度,深入理解 MySQL!
  3. Linux 下安装redis
  4. ABAP--如何实现合计字段分单位合计
  5. 区块链学习笔记:D04 区块链在各行业领域的应用(二)
  6. 【英语学习】【WOTD】ratiocination 释义/词源/示例
  7. 苹果失策?新iPhone捆绑Apple TV+或会致硬件利润率下滑
  8. CAD图纸怎么加密?CAD图纸加密真的安全?
  9. 关于人群基数MCNN和高斯核
  10. 桌面计算机怎么设置声音,右下角小喇叭不见了-电脑桌面右下角有一个调整声音的小喇叭图标没 – 手机爱问...
  11. 线性代数学习笔记——第二十四讲——向量及其线性运算
  12. 外设/* 面包板套件使用
  13. js indexOf()用法
  14. 019 Linux tcpdump 抓包案例入门可真简单啊?
  15. java操作.ini文件
  16. 《老男孩》——记录我们逝去的青春
  17. 安卓修炼之路必要要知道的要求和建议
  18. 线程池+jsoup+htmlclient实现微博超话社区自动签到
  19. 神州租车——为用户提供精细化租车服务
  20. 盖茨接班人:微软产品为何总是挨批

热门文章

  1. 【工具】更新云文档办公利器汇总,腾讯文档测试文件上传,云文档对比测试报告...
  2. 【树莓派】首发树莓派4原型机接口参数曝光
  3. 985学校计算机专业毕业月薪过万,这八个985和211大学分数低,容易考,毕业后月薪过万...
  4. 各种不同几何形状布局布阵下的GDOP相对值图
  5. 转-WinRM service
  6. [Eclipse] - 解决导入flask模块出现的Unresolved Import flask问题
  7. java-信息安全(十)-数字签名算法DSA
  8. 新一代的树莓派3版本——Raspberry Pi 3 发布了
  9. iOS app 切图
  10. Keepalived的相关应用,使用keepalived实现nginx和lvs的高可用负载均衡器