快速业务通道

AOP@Work: 使用方面的下几个步骤-学习建议之后 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
须强制执行更高级的数据级安全性,因此对对象实例甚至其字段的访 问都由规则控制。示例包括 “只有员工的经理或该组的 HR 管理员可以查看敏 感的个人数据” 或 “只有分配给组的经理可以代表组进行交易”。考虑强制执 行第一条规则的示例,如图 6 和清单 8 所示:

图 6. 示例人力资源域模型

AOP@Work: 使用方面的下几个步骤-学习建议之后(14)

时间:2011-09-07 IBM Ron Bodkin

清单 8. 细粒度安全性方 面

public aspect SensitiveDataAuthorization { /** * Matches sensitive read operations on employee data, namely reading * sensitive fields */ pointcut readSensitiveEmployeeData(Employee employee): target(employee) && ( get(* salary) || get(* address) || get(* bonus)); /** * Matches the set up of a security context, in this case for JAAS */ pointcut securityContext(Subject subject, Action action): cflow(execution(* Subject.doAs*(Subject, Action, ..)) && args(subject, action, ..)); before(Subject subject, Employee employee) : readSensitiveEmployeeData(employee) && securityContext(subject, *) { policy.checkAccess(subject, employee); } /** * Matches sensitive read operations on regulation data, namely calling * get methods or calculating tax on it. */ pointcut sensitiveRegOp(EmployeeRegulation reg): this(reg) && ( execution(* get*()) || execution(* calcTax())); before(Subject subject, EmployeeRegulation reg) : sensitiveRegOp(reg) && securityContext(subject, *) { Employee employee = reg.getEmployee(); policy.checkAccess(subject, employee); } public void setPolicy(EmployeeAccessPolicy policy) { ... } public EmployeeAccessPolicy getPolicy() { ... } protected EmployeeAccessPolicy policy; } public class EmployeeAccessPolicyImp implements EmployeeAccessPolicy { /** * Checks for valid access to data. * @throws SecurityException if not valid */ public void checkAccess(Employee employee, Worker worker) throws SecurityException { Employee caller = Employee.getEmployee(worker.getSubject()); if (caller==null || !employee.reportsTo(caller))) { // record attempted security violation throw new SecurityException("..."); } // log successful data access to audit trail } }

在清单 8 中,SensitiveDataAuthorization 方面在 readSensitiveEmplData() 上有第一个建议,保护对员工类上直接定义的敏感数 据字段 的读取。每当在安全上下文(在这种情况下,是当用户通过 JAAS 身份 验证时)中进行时,该建议就建议此类读取。该建议指派给 helper 类 EmployeeAccessPolicy 中的 checkAccess() 方法,该方法检查执行主体(通常 是用户)和其数据被访问的员工之间的关系。如果所需关系不存在,则该方法抛 出异常并发出警报。否则,该方法记录尝试的访问。

方面的第二部分开始变得更有趣:在此,我保护了对由组合对象保存的雇员 数据的访问。具体地说,EmployeeRegulation 对象保存敏感数据,比如政府税 务标识符、税率和扣缴信息。自然,该信息随雇员所在的辖区(国家、州、省、 市等)而变。执行计算税方法或从任何规章数据的实现中获取任何数据都被认为 是敏感的。在这种情况下,我需要从规章数据映射回聚合对象(雇员)来检查访 问。

AOP@Work: 使用方面的下几个步骤-学习建议之后(15)

时间:2011

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号