CACM 구현 public class CACM { public CACM(File file) // access contrlo policy를 해시테이블에 저장 } public void checkMethodAccess(String Method, String Mode) // 해시테이블 condition검사 // 만족하는 condition있으면 통과 // 만족하는 condition없으면 exception발생 public void checkRelationAccess(Entity entity, Relationship relation, ContextItem item , String Mode)
CACM을 이용한 Application의 예 import dk.pervasive.jcaf.EntityListener; import dk.pervasive.jcaf.util.AbstractContextClient; import dk.pervasive.jcaf.CACM; public class UbisoftClient extends AbstractContextClient implements EntityListener { public UbisoftClient(String service_uri) { super(service_uri); } public static void main(String[] args) UbisoftClient tester = new UbisoftClient(args[0]); CACM manager = new CACM(args[1]); tester.test(); private void test() { … if(manager.checkRelationAccess(Pda2, Hosts, Pda1, “MODIFY”)) getContextService().addContextItem(Pda2.getId(), Hosts, Pda1);
구현 과정(1) CACM의 constructor구현 각 key에 대한 condition정보 추출하여 저장 Policy파일의 정보를 분석하여 해시 테이블에 저장 Policy의 각 문장을 subject, object, condition, mode로 각각 저장 subject, object으로 해시 테이블의 key를 구성 Ex) ($Pda_2,$Pda_2!Hosts($Pda_1),$Pda_2!Friends($Pda_1),MODIFY) -> key : <$Pda_2, $Pda_2, Hosts, $Pda_1> 각 key에 대한 condition정보 추출하여 저장
Policy저장 테이블 Condition Key <$Pda, Printer, print> … Entity ($Pda,$Room/$Printer.print,$Pda!Owns($Room),CALL) ($Pda,$Lounge/$Printer.print,$Pda!Employed(Building:ubisoft),CALL) Key Condition <$Pda, Printer, print> … Entity Relationship ContextItem $Pda Owns $Room $Printer IsIn $Pda Employed ubisoft $Printer IsIn $Lounge
구현 과정(2) public void checkMethodAccess(String Method, String Mode)구현 <subject, method>로 key생성 해시테이블에서 key 검색하여 condition추출 현재의 context와 condition비교하여 일치하는 condition이 있으면 true 리턴 없으면 exception발생시키고 false 리턴
구현 과정(3) public void checkRelationAccess(Entity entity, Relationship relation, ContextItem item, String Mode)구현 <subject, entity, relation, item, mode>로 key생성 해시테이블에서 key 검색하여 condition추출 현재의 context와 condition비교하여 일치하는 condition이 있으면 true 리턴 없으면 exception발생시키고 false 리턴