A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 晴雨 中级黑马   /  2018-12-25 10:55  /  870 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

resource 接口
要求类实例级访问控制的类必须实现 resource 接口。该接口的 getowner() 方法返回类实例的所有者。fulfills(subject subject, string relationship) 方法被用于处理特定关系。另外,这些类使用 com.ibm.resource.security.auth.resourcepermission 类保护敏感代码。例如,auction 类拥有下列构造函数:

public auction() {
permission permission =
new resourcepermission("com.ibm.security.sample.auction", "create");
accesscontroller.checkpermission(permission);
}

所有者关系
resourcepermission 类的 implies(permission p) 方法是这个框架的关键。implies() 方法就等同性比较名称和行为属性。如果定义了一个关系,那么必须把受保护的类实例(resource)传递到 resourcepermission 构造函数中。resourcepermission 类理解所有者关系。它将类实例的所有者与执行代码的 subject(用户)进行比较。特定关系被委托给受保护类的 fulfills() 方法。

例如,在清单 5 中所示的 xml 策略文件中,只有 auction 类实例的所有者可以更新(写)文件。该类的 setter 方法使用清单 6 中显示的保护代码:

清单 6. 运行中的 implies(permission) 方法
public void setname(string newname) {
permission permission =
new resourcepermission("com.ibm.security.sample.auction", "write", this);
accesscontroller.checkpermission(permission);
// sensitive code
this.name = newname;
}

被传递到 resourcepermission 构造函数中的 this 引用代表 auction 类实现的 resource 接口。由于策略文件中列出的关系是 owner,所以 resourcepermission 类使用这个引用检查当前 subject(用户)是否拥有与实例所有者相匹配的主体。如果指定了另一个关系,那么 resourcepermission 类调用 auction 类的 fulfills(subject subject, string relationship) 方法。由 resource 实现类提供 fulfills() 方法中的逻辑。

xml 策略文件中列出的 bid 类拥有清单 7 中所示的方法(假设 bid 类实例有一个对相应 auction 类实例的引用 — auction)。

清单 7. 处理特定关系
public void setaccepted(boolean flag) {
permission permission =
new resourcepermission("com.ibm.security.sample.auction", "accept", this);
accesscontroller.checkpermission(permission);
// sensitive code
this.accepted = flag;
}

public boolean fulfills(subject user, string relationship) {
if( relationship.equalsignorecase("auctionowner") ) {
string auctionowner = auction.getowner();
iterator principaliterator = user.getprincipals().iterator();
while(principaliterator.hasnext()) {
principal principal = (principal) principaliterator.next();
if( principal.getname().equals(auctionowner) )
return true;
}
}
return false;
}

传递到 fulfills() 方法中的关系字符串是策略文件中列出的关系。在这个案例中,我们使用了“auctionowner”字符串。

缺省情况下,xmlpolicyfile 类在当前工作目录中查找名为 resourcepolicy.xml 的文件。系统属性 com.ibm.resource.security.auth.policy 可以用于指定另一个不同的文件名和位置。

websphere application server 示例

除命令行示例之外,您可能还想运行这个简单的程序,该程序为了 ibm websphere application server,version 4.0.2 而被优化。

一个可运行的示例
综合这些信息,我们将运行一个简单的命令行示例。该示例程序包含三个 jar 文件:

resourcesecurity.jar
example.jar
exampleactions.jar
resourcesecurity.jar 文件包含允许实例级访问控制的 jaas 扩展框架。它还包含一个 loginmoduleexample 类,这个类从 xml 文件读取用户认证信息。用户标识和密码存储在 users.xml 文件中。用户组存储在 groups.xml 文件中。关于 loginmoduleexample 的更多信息,请参阅参考资料部分。

11 个回复

倒序浏览
你真的太优秀了,全是干货
回复 使用道具 举报
真的干货呀,专门过来感谢的
回复 使用道具 举报
棒棒棒
回复 使用道具 举报
回复 使用道具 举报
故天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,曾益其所不能。
回复 使用道具 举报
昨天是一张作废的支票,明天是一张期票,而今天则是唯一拥有的现金。加油
回复 使用道具 举报
能坚持学习的人都是最棒的。
回复 使用道具 举报
选择了,便走下去。
回复 使用道具 举报
只要朝着一个方向努力,一切都会变得得心应手。加油
回复 使用道具 举报
能坚持学习的人都是最棒的。
回复 使用道具 举报
预测未来最好的方法就是去创造未来。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马