JAAS ( Java Authentication and Authorization Service)
JAAS是对JCE安全框架的重要补充,通过提供认证用户和确定用户授权来增强JAVA解决方案的动态安全性,使得资源能够得到很好得到保护和控制(JAAS使用动态的安全策略来定义权限,而不是将其静态的嵌入到代码中)。
JAAS 采用的是插件的运行方式,一开始就被设计成可插拔的(Pluggable),根据应用的需要,只要配置一下JAAS的配置文件,这些组件即可包含在我们的应用程序中。使用JAAS包接口,开发者和第三方可以开发一些组件或者BEAN来实现登陆认证,或者通过与使用者或外部的系统的进行交互来访问认证信息(当然我们可以设计更为稳妥安全的密码学协议)。JAAS提供了一组用于用户鉴别的类和接口,这意味着支持JAAS的应用会要求用户登陆,同时 JAAS提供了另一组用于用户授权的类和接口。在讨论例子之前,先对JAAS API中常用的一些类和接口做个简单的说明。
LoginModule :确认用户的合法性(使用CallbackHandler或者其他类方法),并分配访问权限principal给subject;
LoginContext:为了实现用户鉴别,建立相应的环境,从配置文件中导入规则;
CallbackHandler:回调处理器,负责与用户(代码拥有者和执行者)交互,确认其身份的合法性;
Subject:表示登陆处理的目标,即一个被鉴别的用户。并可关联一个或多个pirncipal;
Principal:表示具有访问权限的一个实体,可以看作是可以执行某种操作的证件。
理解这些类和接口的关系我给个生动的比方:
一个军事学校,入学的时候校方(LoginModule)根据学生(Subject)的入学通知来确定其合法性,这个过程交由某工作人员(CallbackHandler)执行,
(CallbackHandler)确认后,(LoginModule)给不同(Subject)根据其身份发给相关的证件(Principal),有了该证件就可以访问对应的资源,
(Subject)根据自己的(Principal)的级别可以使用和访问学校不同资源。
指定配置文件位置的方式:(按顺序)
1、系统变量
System.setProperty("java.security.auth.login.config","D://jaas.config");
2、启动命令参数
-Djava.security.auth.login.config=D:/jaas.config
另参考:
http://hi.baidu.com/dd_taiyangxue/blog/item/47e2932c077f8438359bf77b.html
JAAs授权
http://lzhuacuo.spaces.live.com/blog/cns!18730E989D068035!527.entry