本站首页    管理页面    写新日志    退出


«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7605441
建立时间:2006年5月29日




[J2SE]JAAS:授权篇
软件技术

lhwork 发表于 2006/8/18 16:54:18

JAAS:授权篇Authorization classes: Policy AuthPermission PrivateCredentialPermission The static method doAs() in Subject achieves the effect of having an action run as the subject. Based on whether this action is authorized, the action completes successfully or generates an exception. To authenticate and authorize a Subject, these steps are performed: 为了对一个Subject认证并授权,通常有以下的步骤: 建立一个应用实例 LoginContext. The LoginContext包含一个配置文件 客户端程序调用 LoginContext的 login().  login() 方法调用 已载入的LoginModules. 每个LoginModule 试图认证 Subject. 一旦成功, LoginModules关联相关的Principals and credentials . 这个 LoginContext 执行对subject的授权如果成功, 应用程序将从LoginContext中抓取已经授权的Subject. Upon successful authentication of a Subject, fine-grained access controls can be placed upon that Subject by invoking the Subject.doAs() methods. The permissions granted to that Subject are configured in a JAAS policy. The following code outline illustrates how application code uses the JAAS framework:     // Instantiate a login context    LoginContext context = new LoginContext("name", CallbackHandler);    // Authenticate the subject    context.login();    // Retrieve the authenticated subject    Subject subject = context.getSubject();    // Enforce Access Controls    Subject.doAs(subject, action); ------------- 运行中的 AccessController AccessController 类典型的 checkPermission(Permission p) 方法调用可能会导致下面的一系列操作: AccessController 调用 java.security.Policy 类实现的 getPermissions(CodeSource codeSource) 方法。 getPermissions(CodeSource codeSource) 方法返回一个 PermissionCollection 类实例,这个类实例代表一个相同类型许可权的集合。 AccessController 调用 PermissionCollection 类的 implies(Permission p) 方法。 接下来, PermissionCollection 调用集合中包含的单个 Permission 对象的 implies(Permission p) 方法。如果集合中的当前许可权对象暗示指定的许可权,则这些方法返回 true ,否则返回 false 。 现在,让我们更详细地看一下这个访问控制序列中的重要元素。 PermissionCollection 类 大多数许可权类类型都有一个相应的 PermissionCollection 类。这样一个集合的实例可以通过调用 Permission 子类实现定义的 newPermissionCollection() 方法来创建。 java.security.Policy 类实现的 getPermissions() 方法也可以返回 Permissions 类实例 ― PermissionCollection 的一个子类。这个类代表由 PermissionCollection 组织的不同类型许可权对象的一个集合。 Permissions 类的 implies(Permission p) 方法可以调用单个 PermissionCollection 类的 implies(Permission p) 方法。 CodeSource 和 ProtectionDomain 类 许可权组合与 CodeSource (被用于验证签码(signed code)的代码位置和证书)被封装在 ProtectionDomain 类中。有相同许可权和相同 CodeSource 的类实例被放在相同的域中。带有相同许可权,但不同 CodeSource 的类被放在不同的域中。一个类只可属于一个 ProtectionDomain 。要为对象获取 ProtectionDomain ,请使用 java.lang.Class 类中定义的 getProtectionDomain() 方法。 许可权 赋予 CodeSource 许可权并不一定意味着允许所暗示的操作。要使操作成功完成,调用栈中的每个类必须有必需的许可权。换句话说,如果您将 java.io.FilePermission 赋给类 B,而类 B 是由类 A 来调用,那么类 A 必须也有相同的许可权或者暗示 java.io.FilePermission 的许可权。 在另一方面,调用类可能需要临时许可权来完成另一个拥有那些许可权的类中的操作。例如,当从另一个位置加载的类访问本地文件系统时,我们可能不信任它。但是,本地加载的类被授予对某个目录的读许可权。这些类可以实现 PrivilegedAction 接口来给予调用类许可权以便完成指定的操作。调用栈的检查在遇到 PrivilegedAction 实例时停止,有效地将执行指定操作所必需的许可权授予所有的后继类调用。 JAAS相关类结构图     500)this.width=500'>  Guosheng Huang 先生写了篇[Extending JAAS],网上翻译文章的转贴地方很多,比如 http://www.matrix.org.cn/resource/article/0/638.html 建议还是去搜索一下原文,大意是通过工厂模式,适配器模式来扩展JAAS,[包含认证和授权].作者提到"在本文中,我们重温JAAS的基础,并且检查验证了如何扩展JAAS使其成为一个更加具备动态化、灵活化和规模化的特性的框架。" 他使用的配置文件为如下格式: <?xml version="1.0"?><jaasAuth> <authentication>  <loginAdapter class="com.jdj.jaas.LoginDBSourceAdapter"/>  <initParam name="driver"  value="com.mysql.jdbc.Driver" />  <initParam name="url"  value="jdbc:mysql:///mydb" />  <initParam name="user"  value="mydb" />  <initParam name="password"  value="mydb" /> </authentication> <authorization>  <permissionAdapter class="com.jdj.jaas.PermissionRoleDBAdapter"/>  <initParam name="driver"  value="com.mysql.jdbc.Driver" />  <initParam name="url"  value="jdbc:mysql:///mydb" />  <initParam name="user"  value="mydb" />  <initParam name="password"  value="mydb" /> </authorization></jaasAuth> 其授权部分,我用反向工程搞了一个图,有助于大家理解其结构.


阅读全文(2557) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.477 second(s), page refreshed 144777768 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号