Java安全之认证与授权

本文介绍了Java平台的认证与授权服务JAAS,包括如何控制代码对敏感资源的访问,认证与授权的区别与联系,以及如何通过配置安全策略文件实现权限控制。文章通过实例展示了如何创建LoginContext、LoginModule、CallbackHandler和Principal,以及如何进行细粒度的权限控制。
摘要由CSDN通过智能技术生成

    Java平台提供的认证与授权服务(Java Authentication and Authorization Service (JAAS)),能够控制代码对敏感或关键资源的访问,例如文件系统,网络服务,系统属性访问等,加强代码的安全性。主要包含认证与授权两部分,认证的目的在于可靠安全地确定当前是谁在执行代码,代码可以是一个应用,applet,bean,servlet;授权的目的在于确定了当前执行代码的用户有什么权限,资源是否可以进行访问。虽然JAAS表面上分为了两大部分,而实际上两者是密不可分的,下面看一段代码:

public class App {
	
	public static void main(String[] args) {
		System.out.println(System.getProperty("java.home"));
	}
}


非常简单只是输出java.home系统属性,现在肯定是没有任何问题,属性会能正常输出。把上述代码改为如下后:

public class App {
	
	public static void main(String[] args) {
		//安装安全管理器
		System.setSecurityManager(new SecurityManager());
		
		System.out.println(System.getProperty("java.home"));
	}
}


抛出了如下异常:java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.home" "read"),异常提示没有对java.home的读取权限,系统属性也是一种资源,与文件访问类似;默认情况下对于普通Java应用是没有安装安全管理器,在手动安装安全管理器后,如果没有为应用授权则没有任何权限,所以应用无法访问java.home系统属性。

授权的方式是为安全管理器绑定一个授权策略文件。由于我是在eclipse Java工程中直接运行main方法,所以就在工程根目录下新建一个demo.policy文件,文件内容如下:

grant  {
	permission java.util.PropertyPermission "java.home", "read";
};


该授权的效果是任何用户运行的任何程序都有对java.home的读权限,policy文件的具体格式请参看:http://docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html
为安全管理器绑定policy文件的方式有两种:一、在运行程序的时候加入-Djava.security.policy=demo.policy虚拟机启动参数;二、执行System.setProperty("java.security.policy", "demo.policy");其实两者的效果一样,都是在设置系统属性,其中demo.policy是路径,这里为了简单指定的是相对路径,绝对路径当然也没问题。再次运行程序不再抛出异常,

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值