- 浏览: 243794 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
bzc67869328:
Solr笔记 -
qinguolong:
下载看看,希望能用得上,非常刚醒。
apache MD5 加密 -
slightz:
博主,能解释下这代码他的作用么,为什么这样输出放到myecli ...
MyEclipse 9 Velocity插件 -
筱韩_One:
我这里,把初始连接数量变小,就不会出现这种错误了。
Data source rejected establishment of connection, message from server: "Host '主机 -
hmxingkong:
...
Servlet 3.0特性详解(2)
每个Java应用都可以有自己的安全管理器,它是防范恶意攻击的主要安全卫士。安全管理器通过执行运行阶段检查和访问授权,以实施应用所需的安全策略,从而保护资源免受恶意操作的攻击。实际上,安全管理器根据Java安全策略文件决定将哪组权限授予类。然而,当不可信的类和第三方应用使用JVM时,Java安全管理器将使用与JVM相关的安全策略来识别恶意操作。在很多情况下,威胁模型不包含运行于JVM中的恶意代码,此时Java安全管理器便不是必需的。当安全管理器检测到违反安全策略的操作时,JVM将引发 AccessControlException或SecurityException。
在Java应用中,安全管理器是由System类中的方法setSecurityManager设置的。要获得当前的安全管理器,可以使用方法 getSecurityManager。
java.lang.SecurityManager类包含了很多checkXXXX方法,如用于判断对文件访问权限的checkRead(String file)方法。这些检查方法调用SecurityManager.checkPermission方法,后者根据安全策略文件判断调用应用是否有执行所请求的操作权限。如果没有,将引发SecurityException。
如果想让应用使用安全管理器和安全策略,可在启动JVM时设定-Djava.security.manager选项,还可以同时指定安全策略文件。如果在应用中启用了Java安全管理器,却没有指定安全策略文件,那么Java安全管理器将使用默认的安全策略,它们是由位于目录$JAVA_HOME/jre /lib/security中的java.policy定义的。
概念
策略(Policy)
类装载器用Policy对象帮助它们决定,把一段代码导入虚拟机时应该给它们什么样的权限. 任何时候,每一个应用程序都只有一个Policy对象.
策略文件
Sun的java1.2平台具体的Policy子类采用在一ASCII策略文件中用上下文无关文法描述安全策略.
一个策略文件包括了一系列grant子句,每一个grant子句将一些权限授给一个代码来源。
保护域(ProtectionDomain)
当类装载器将类型装入 java虚拟机时,它们将为每一个类型指派一个保护域,保护域定义了授予
一段特定的代码的所有权限.装载入java虚拟机的每一个类型都属于一个且仅属于一个保护域.
访问控制器(AccessController)
implies()
判断一个Permissioin对象的权限,是否隐含(imply)在另一个Permissioin对象的权限中。
checkPermission()
AccessController的核心方法,这个方法决定一个特定的操作能否被允许.
它自顶向下检查栈,只要它遇到一个没有权限桢,它将抛出一个AccessControlException导常。
doPrivileged()
有的时候,调用栈较上层(更靠近栈顶)的代码可能希望执行一段代码,而这段代码在调用栈的较
下层是不允许执行的。
为了使可信的代码执行较不可靠的代码操作(这段不可靠的代码位于调用栈的较下层且没有执行
这个操作的权限),AccessController类重载了四个名为doPrivileged()的静态方法.
AccessController 会忽略调用doPrivileged()方法的调用者的调用者的权限.
Permission:
权限是用抽象类java.security.Permission的一个子类的实例表示的.
CodeSource:
代码来源,包含代码库URL和签名者.
Permissions:
PermissionCollection(权限集合)的子类
装载时生成保护域的步骤:
1 根据指定的Policy文件生成一个Policy对象
2 生成CodeSource
3 用CodeSource在Policy中找到CodeSource对应的Permissions
4 用CodeSource和Permissons构造一个ProtectionDomain
5 把ProtectionDomain同这个类在方法区中的类数据联系起来(ClassLoader.defineClass()).
运行权限检查:
如当前应用程序执行new FileInputStream(“a.txt”),java会检查当前代码有没有读”a.txt”的权限.
步骤:
1 调用SecurityManager.checkRead()方法
2 调用AccessControl.checkPermission()方法,执行栈检查
实现安全管理器步骤:
(1) 创建一个SecurityManager的子类;
(2) 覆盖一些方法。
在Java应用中,安全管理器是由System类中的方法setSecurityManager设置的。要获得当前的安全管理器,可以使用方法 getSecurityManager。
java.lang.SecurityManager类包含了很多checkXXXX方法,如用于判断对文件访问权限的checkRead(String file)方法。这些检查方法调用SecurityManager.checkPermission方法,后者根据安全策略文件判断调用应用是否有执行所请求的操作权限。如果没有,将引发SecurityException。
如果想让应用使用安全管理器和安全策略,可在启动JVM时设定-Djava.security.manager选项,还可以同时指定安全策略文件。如果在应用中启用了Java安全管理器,却没有指定安全策略文件,那么Java安全管理器将使用默认的安全策略,它们是由位于目录$JAVA_HOME/jre /lib/security中的java.policy定义的。
概念
策略(Policy)
类装载器用Policy对象帮助它们决定,把一段代码导入虚拟机时应该给它们什么样的权限. 任何时候,每一个应用程序都只有一个Policy对象.
策略文件
Sun的java1.2平台具体的Policy子类采用在一ASCII策略文件中用上下文无关文法描述安全策略.
一个策略文件包括了一系列grant子句,每一个grant子句将一些权限授给一个代码来源。
保护域(ProtectionDomain)
当类装载器将类型装入 java虚拟机时,它们将为每一个类型指派一个保护域,保护域定义了授予
一段特定的代码的所有权限.装载入java虚拟机的每一个类型都属于一个且仅属于一个保护域.
访问控制器(AccessController)
implies()
判断一个Permissioin对象的权限,是否隐含(imply)在另一个Permissioin对象的权限中。
checkPermission()
AccessController的核心方法,这个方法决定一个特定的操作能否被允许.
它自顶向下检查栈,只要它遇到一个没有权限桢,它将抛出一个AccessControlException导常。
doPrivileged()
有的时候,调用栈较上层(更靠近栈顶)的代码可能希望执行一段代码,而这段代码在调用栈的较
下层是不允许执行的。
为了使可信的代码执行较不可靠的代码操作(这段不可靠的代码位于调用栈的较下层且没有执行
这个操作的权限),AccessController类重载了四个名为doPrivileged()的静态方法.
AccessController 会忽略调用doPrivileged()方法的调用者的调用者的权限.
Permission:
权限是用抽象类java.security.Permission的一个子类的实例表示的.
CodeSource:
代码来源,包含代码库URL和签名者.
Permissions:
PermissionCollection(权限集合)的子类
装载时生成保护域的步骤:
1 根据指定的Policy文件生成一个Policy对象
2 生成CodeSource
3 用CodeSource在Policy中找到CodeSource对应的Permissions
4 用CodeSource和Permissons构造一个ProtectionDomain
5 把ProtectionDomain同这个类在方法区中的类数据联系起来(ClassLoader.defineClass()).
运行权限检查:
如当前应用程序执行new FileInputStream(“a.txt”),java会检查当前代码有没有读”a.txt”的权限.
步骤:
1 调用SecurityManager.checkRead()方法
2 调用AccessControl.checkPermission()方法,执行栈检查
实现安全管理器步骤:
(1) 创建一个SecurityManager的子类;
(2) 覆盖一些方法。
import java.io.*; public class TestSecurity { public static void main(String args[]) { try { System.setSecurityManager(new PasswordSecurityManager("123456")); } catch (SecurityException se) { System.out.println("SecurityManager already set!"); } try { //DataInputStream fis = new DataInputStream(new FileInputStream("input.txt")); BufferedReader fis = new BufferedReader(new FileReader("input.txt")); //DataOutputStream fos = new DataOutputStream( new FileOutputStream("output.txt")); BufferedWriter fos = new BufferedWriter(new FileWriter("output.txt")); String inputString; while ((inputString = fis.readLine()) != null) { //fos.writeBytes(inputString); //fos.writeByte('\n'); fos.write(inputString); fos.write('\n'); } fis.close(); fos.close(); } catch (IOException ioe) { System.out.println("I/O failed for SecurityManagerTest."); }catch(Exception e) { System.out.println(e.toString()); } } } import java.io.*; class PasswordSecurityManager extends SecurityManager { private String password; PasswordSecurityManager(String password) { super(); this.password = password; } private boolean accessOK() { int c; //DataInputStream dis = new DataInputStream(System.in); BufferedReader dis = new BufferedReader(new InputStreamReader(System.in)); String response; System.out.println("What's the secret password?"); try { response = dis.readLine(); if (response.equals(password)) return true; else return false; } catch (IOException e) { return false; } } public void checkRead(FileDescriptor filedescriptor) { if (!accessOK()) throw new SecurityException("Not a Chance!"); } public void checkRead(String filename) { if (!accessOK()) throw new SecurityException("No Way!"); } public void checkRead(String filename, Object executionContext) { if (!accessOK()) throw new SecurityException("Forget It!"); } public void checkWrite(FileDescriptor filedescriptor) { if (!accessOK()) throw new SecurityException("Not!"); } public void checkWrite(String filename) { if (!accessOK()) throw new SecurityException("Not Even!"); } }
发表评论
-
cannot call 'open' method 关于DWR Chrome 调用的解决方法
2013-05-20 11:51 1745dwr包是2.10,chrome是最新版本 26.0.1410 ... -
jpg转bmp
2012-09-12 19:32 3340import java.awt.image.Buffere ... -
指定java 虚拟机运行的时候申请的虚拟内存大小的方法
2012-08-20 19:09 957配置如图 -
Solr笔记
2012-04-10 20:35 12931... -
Java 图片格式转换
2012-03-22 16:21 2076package img; import java.a ... -
Linux配置Java环境
2012-02-23 14:22 941下载 rpm http://www.oracle.com ... -
解决java virtual machine launcher could not find the main class. program will exit
2012-02-14 10:25 2368今天Eclipse运行一个简单的Main方法都出错; 弹出ja ... -
JAVA 关键字 Volatile transient
2012-01-10 09:50 931关键字 Volatile 修饰的成员变量在每次被线程访问时 ... -
网页上播放MP4
2011-05-19 11:46 2628<对象ID =“播放器”宽度= 300高度= 300的 ... -
apache MD5 加密
2010-08-20 15:15 16708import org.apache.commons.codec ... -
错误页面
2010-07-12 11:02 0<body bgcolor="#DFEB ... -
Servlet 3.0特性详解(4)
2010-06-28 16:01 1647ServletContext的性能增强 除了以上的新特性之外 ... -
Servlet 3.0特性详解(3)
2010-06-28 15:58 1367属性名类型描述 1.filter ... -
Servlet 3.0特性详解(2)
2010-06-28 15:49 1762[/b][b]新增的注解支持 Servlet 3.0的部署描 ... -
Servlet 3.0特性详解(1)
2010-06-28 15:45 1728Servlet 3.0作为Java EE6规范 ... -
Java Servlet 3.0 规范发布最终建议草案
2010-06-28 15:21 1325Servlet 3.0规范的一个主要目标是无需手动修改应用程序 ... -
Axis 即使发布 JWS
2010-06-21 17:55 17761.服务端代码 /** * 注意:JWS不支持带包的类 ... -
Axis 环境配置
2010-06-21 17:38 16121.下载Axis 文件包http://www.apache.o ... -
webService简介
2010-06-17 17:52 1190WebSevice 让一个程序可以透明地调用互 ... -
EHCACHE 简介
2010-06-13 16:15 2427两个最著名的开源java 缓存解决方案的厂商现在由于 Terr ...
相关推荐
安全经理Java安全管理器的定制实现,旨在为Web应用程序提供额外的保护和保证。 它允许使用更灵活的许可算法,以更好地满足J2EE环境的安全需求。背景默认的Java安全管理器实现被设计为用于不受信任的代码的通用沙箱。...
SDM(Security Device Manager)是Cisco公司提供的全新图形化路由器管理工具。该工具利用WEB界面、Java技术和交互配置向导使得用户无需了解命令行接口(CLI)即可轻松地完成IOS路由器的状态监控、安全审计和功能配置。在...
Java-Security Java Security Documents ##author:genxor Auditing and Bypassing Security Manager policies.docx Java Deserialization Vulnerabilities - The Forgotten Bug Class (RuhrSec Edition).pdf Object...
Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...
Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
用于Active Directory集成的OpenSpaces安全管理器。 建成后,您将拥有两个罐子: 经理(openspaces-ldap-manager.jar) 用于Active Directory的Spring安全桥。 应该通过spring-security.properties文件配置 ...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
21. Java认证和授权服务(JAAS)供应器 21.1. 概述 21.2. 配置 21.2.1. JAAS CallbackHandler 21.2.2. JAAS AuthorityGranter 22. CAS认证 22.1. 概述 22.2. CAS是如何工作的 22.3. 配置CAS客户端 ...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
5.1 Hello Web安全Java配置 29 5.1.1 AbstractSecurityWebApplicationInitializer 31 5.1.2 AbstractSecurityWebApplicationInitializer不存在Spring 31 5.1.3使用Spring MVC的...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
Exploring Java introduces the basics of Java, the hot new object-oriented programming language for networked applications from Sun Microsystems. Exploring Java enables ...Writing a security manager
IBM Security Identity Manager加密和解密工具如果您需要恢复加密的ISIM密码或使用其他密钥对其进行重新加密,这就是您需要的工具集。 另外,您拥有一个用于解密ISIM适配器发行版的工具(以防您不想浪费时间与IBM...