0 Java安全模型图,和 策略与权限关系:
上图可知, 策略文件和安全管理器需要一起合作才能实现安全管理功能, 策略文件里面的内容的多少决定操作权限的多寡。
1 介绍策略文件:
做一个简单demo, 感受下策略文件相对于权限控制:
第一步,定义一个简单类。
import java.io.FileWriter; import java.io.IOException; public class TestPolicy { public static void main(String[] args) { FileWriter writer; try { writer = new FileWriter("d:/testPolicy.txt"); writer.write("hello1"); writer.close(); } catch (IOException e) { e.printStackTrace(); } } }
第二步,定义一个简单的策略文件,我们放到工程的类路径下(src文件夹里),名字为myPolicy.txt
grant codeBase "file:D:/workspace/TestPolicy/bin/*" { permission java.io.FilePermission "d:/testPolicy.txt", "read"; };
这个文件的作用
第一行:grant codeBase "file:D:/workspace/TestPolicy/bin/*"意思是给D:/workspace/TestPolicy/bin/*给这个路径下的所有文件定义权限,星号是统配符,所有的意思
第二行:permission java.io.FilePermission "d:/testPolicy.txt", "read";意思是d:/testPolicy.txt这个文件 只分配读的权限。
第三步,运行,在cmd窗口输入(运行不起来,说明jdk的环境变量没有配置好,去配一下)
java -classpath D:/workspace/TestPolicy/bin -Djava.security.manager -Djava.security.policy=D:/workspace/TestPolicy/src/myPolicy.txt com.yfq.test.TestPolicy
这句话的意思,把当前的类路径指定为D:/workspace/TestPolicy/bin,启动默认的安全管理器(这里你应该也猜到了,策略必须和安全管理器一起合作才能起作用)
第四步,查看输出
异常,提示本应用对d:/testPolicy.txt这个文件没有写的权限。
修改一下上面的myPolicy.txt文件,如下
grant codeBase "file:D:/workspace/TestPolicy/bin/*" { permission java.io.FilePermission "d:/testPolicy.txt", "read,write"; };
再次运行,没有报错。
这基本就是安全管理器和策略文件搭配下实现对目标资源控制的一个简单流畅,安全管理器通过访问策略文件来确定对目标文件有多少权限,策略文件(本例中的myPolicy.txt)在jvm中对应着java.security.Policy类,
总结为:
java对应用程序的访问控制策略是由抽象类java.security.Policy的一个子类的单例所表示,
任何时候,每个应用程序实际上只有一个Policy对象,Policy对象对应着策略文件。
类装载器利用这个Policy对象来帮助他们决定,在把一段代码导入虚拟机时应该给予什么权限。
相关推荐
《深入理解JVM》(Inside the JVM) 是一本关于Java虚拟机的重要参考资料,它涵盖了JVM的内部工作原理,包括类加载机制、内存管理、字节码执行等核心概念。"gettingloaded.html" 可能是其中的一个章节,专门探讨了类的...
通过调整JVM的垃圾收集策略,如使用G1垃圾收集器或CMS收集器,可以更有效地处理这些对象,避免内存占用过多。 3. **Tomcat配置文件**: - `context.txt`可能包含的是Tomcat的上下文配置,它定义了应用程序的部署...
- 负责读取Java类文件(.class),将其转换为运行时数据结构,这些数据结构在JVM中表示为方法区中的类。 - 类装载器确保类的正确加载和重用,避免了重复加载相同的类。 2. **执行引擎(Execution Engine)** - 执行...
Java源代码(.java文件)通过Java编译器(javac)被编译成Java字节码(.class文件),这些字节码可以在任何安装了JVM的平台上运行,实现了“一次编写,到处运行”的目标。 JVM的主要组件包括类加载器、运行时数据区...
在Java开发领域,JVM(Java Virtual Machine)是至关重要的组成部分,它负责解析并执行Java程序。JVM调优是一项核心技能,可以帮助我们优化应用程序的性能,减少内存消耗,提高响应速度,以及避免可能出现的垃圾收集...
IBM JVM.rar_jvm_site:www.pudn.com 这个压缩包文件主要聚焦于IBM的Java虚拟机(JVM)的深入解析,尤其侧重于其内存管理和底层运作机制的探讨。Java虚拟机是Java程序执行的核心,它为Java应用程序提供了一个跨平台的...
1. 类装载器:类装载器负责加载.class文件到JVM中,分为引导类装载器、扩展类装载器和应用类装载器,以及用户自定义的类装载器。了解类装载过程(加载、验证、准备、解析和初始化)对于理解类的生命周期至关重要。 ...
在提供的压缩包文件"nginx-upstream-jvm-route-master"中,可能包含了源代码、配置示例、安装指南或者使用文档,帮助用户理解和实现这一特性。用户需要按照文档的指示进行配置和部署,以便在Nginx 1.15中成功使用...
在JVM的学习过程中,策略文件是一个重要的环节,它主要用于安全管理,控制不同代码的权限。本篇笔记将深入探讨Java策略文件的概念、结构以及如何使用。 策略文件是Java安全模型的一部分,它定义了哪些代码可以执行...
加载阶段,JVM找到类的.class文件;验证确保字节码安全;准备阶段,为静态变量分配内存并初始化为默认值;解析将符号引用转为直接引用;初始化执行类的初始化方法。 垃圾回收是JVM的一大特色,它自动管理内存,避免...
《深入理解Java虚拟机:Java高级特性与最佳实践》是一本深受Java开发者喜爱的经典书籍,它详尽地探讨了Java虚拟机(JVM)的工作原理和优化策略,同时结合源码分析,帮助读者掌握Java编程的深层知识。在这个名为"jvm_...
9. **-XX:+HeapDumpOnOutOfMemoryError**:当发生OOM错误时,生成堆转储文件,便于分析内存泄漏问题。 10. **-XX:ReservedCodeCacheSize**:设置JIT编译器代码缓存的大小。 在实际应用中,我们需要根据应用的特性...
《JVM、GC详解及调优》是一份深入解析Java虚拟机(JVM)和垃圾收集(Garbage Collection,简称GC)的详细资料。本文将根据提供的信息,深入阐述JVM的工作原理,GC的机制以及如何进行JVM的性能调优。 首先,JVM是...
- **堆内存**:分为年轻代、老年代和持久代,理解每个区域的作用和GC策略对于优化内存使用至关重要。 - **垃圾回收(GC)**:监视GC活动,包括GC次数、耗时和内存分配情况,可以帮助识别可能的性能瓶颈。 - **...
- `lib`:包含了库文件和其他支持文件,这些文件用于运行和扩展SAP JVM的功能。 5. **使用和配置**:安装SAP JVM后,用户需要配置系统环境变量,如`JAVA_HOME`指向SAP JVM的安装路径。此外,通过修改`jre/lib/...
泛型允许编译器在编译阶段检查类型安全,并确保编译后的类文件不包含类型信息,从而减少运行时的类型转换开销。自动装箱是指将基本类型自动转换为对应的包装类,反之则是自动拆箱。 ##### 4.2 JIT编译器 即时...
4. **调整JVM参数**:根据系统属性部分的信息,优化JVM的内存设置,如增大堆内存或调整垃圾收集策略。 5. **更新或替换库**:如果问题指向某个库,考虑更新至最新版本或寻找替代方案。 6. **排查硬件问题**:如果...
当JVM遇到问题,如内存溢出或长时间的垃圾回收,它可能会生成堆栈转储(dump)文件,这些文件包含了JVM在特定时刻的详细状态,包括对象、类加载器、线程、堆和栈信息。"Jvm堆栈dump文件分析"是指通过特定工具对这些...
7. **其他Session共享策略**:除了上述的Nginx-upstream-jvm-route,还可以使用如 sticky sessions(基于Cookie的粘滞会话),通过在客户端保存特定的服务器标识来实现Session的保持;或者利用外部存储如Redis、...