⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 retainedadi.java

📁 一个完整的XACML工程,学习XACML技术的好例子!
💻 JAVA
字号:
/*
* Copyright (c) 2006, University of Kent
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without 
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this 
* list of conditions and the following disclaimer.
* 
* Redistributions in binary form must reproduce the above copyright notice, 
* this list of conditions and the following disclaimer in the documentation 
* and/or other materials provided with the distribution. 
*
* 1. Neither the name of the University of Kent nor the names of its 
* contributors may be used to endorse or promote products derived from this 
* software without specific prior written permission. 
*
* 2. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS  
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
* PURPOSE ARE DISCLAIMED. 
*
* 3. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
* POSSIBILITY OF SUCH DAMAGE.
*
* 4. YOU AGREE THAT THE EXCLUSIONS IN PARAGRAPHS 2 AND 3 ABOVE ARE REASONABLE
* IN THE CIRCUMSTANCES.  IN PARTICULAR, YOU ACKNOWLEDGE (1) THAT THIS
* SOFTWARE HAS BEEN MADE AVAILABLE TO YOU FREE OF CHARGE, (2) THAT THIS
* SOFTWARE IS NOT "PRODUCT" QUALITY, BUT HAS BEEN PRODUCED BY A RESEARCH
* GROUP WHO DESIRE TO MAKE THIS SOFTWARE FREELY AVAILABLE TO PEOPLE WHO WISH
* TO USE IT, AND (3) THAT BECAUSE THIS SOFTWARE IS NOT OF "PRODUCT" QUALITY
* IT IS INEVITABLE THAT THERE WILL BE BUGS AND ERRORS, AND POSSIBLY MORE
* SERIOUS FAULTS, IN THIS SOFTWARE.
*
* 5. This license is governed, except to the extent that local laws
* necessarily apply, by the laws of England and Wales.
*/


package issrg.pba.rbac;

import issrg.pba.PbaException;
import java.util.Map;
import java.util.Hashtable;
import java.util.Vector;

/**
 * This is the class for managing retained ADI when history based decision is 
 * needed. 
 * All successfull decisions are kept in this class in a Vector 
 * decisionHistoryVec. 
 *
 * @author W. Xu
 * @version 0.1
 */

public class RetainedADI {
  Vector decisionHistoryVec;

  /**
   * This constructor generates a new retained ADI object with empty dicisionHistoryVec. 
   */
  public RetainedADI(){
      decisionHistoryVec = new Vector();
  }

  /**
   * This constructor generates a new retained ADI object with dicisionVec as 
   * the decisionHisotryVec. 
   * 
   * @params decisionVec is the vector which contains a vector of 
   *   DecisionRecord. 
   *
   */
  public RetainedADI(Vector decisionVec){
      this.decisionHistoryVec = decisionVec;
  }

  /**
   * This method adds a new DecisionRecord into the decisionHistoryVec. 
   * 
   * @params dr is the new DecisionRecord. 
   *
   */
  public void add(DecisionRecord dr){
      decisionHistoryVec.add(dr);
  }

  /**
   * This method adds a new Vector of DecisionRecord into the 
   * decisionHistoryVec. 
   * 
   * @params V is the new Vector of DecisionRecord. 
   *
   */
  public void addAll(Vector v){
      decisionHistoryVec.addAll(v);
  }

  /**
   * This method returns the size of the decisionHistoryVec. 
   */
  public int size(){
      return decisionHistoryVec.size();
  }


  /**
   * This method retrieves a vector of history decision records according to 
   * the policy contextname, instance contextname, and
   * userID. 
   * 
   * @params policyDN is the context name in the MSoD policy. 
   * @params instanceDN is the user context instance. 
   * @params userID is the user ID. 
   *
   */
  public Vector getHistoryRecords(ContextNamePrincipal policyDN, ContextNamePrincipal instanceDN,
            String userID) {
      if (policyDN == null || instanceDN == null ) {
          return null;
      }
      ContextNamePrincipal instanceDNInst = policyDN.instantiate(instanceDN);   
      if (instanceDNInst == null) {
//          System.out.println("One record 1: null 2");
          return null; 
      }
      int size = decisionHistoryVec.size();
      DecisionRecord dr = null; 
      Vector result = new Vector();
      for (int i = 0; i<size; ++i){
          dr = (DecisionRecord) decisionHistoryVec.get(i);
          ContextNamePrincipal cnp = null;
          try {
            cnp = new ContextNamePrincipal(dr.getContextInstance());
          } catch (Exception e) { 
          }
          ContextNamePrincipal cnpInstantiated = policyDN.instantiate(cnp );
          if (cnpInstantiated == null) {
              continue; 
          }

//          System.out.println("One record 1: " + cnpInstantiated.getName() );
//          System.out.println("One record 2: " + instanceDNInst.getName() );

          if ( instanceDNInst.equals( cnpInstantiated ) &&
                    (dr.userID).compareTo(userID)  == 0 ){
//              System.out.println("One record in the history found: " + dr.toString());
              result.add(dr);
          }

      }

      return result; 

  }

  /**
   * This method deletes all decision records from the retained ADI which are 
   * related to the instance contextname -- instanceDN according to the 
   * policy context.
   * 
   * @params policyDN is the context name in the MSoD policy. 
   * @params instanceDN is the user context instance. 
   *
   */
  public void removeContext(ContextNamePrincipal policyDN, ContextNamePrincipal instanceDN){
      int size = decisionHistoryVec.size();
      ContextNamePrincipal instanceDNInstantiated = policyDN.instantiate(instanceDN);   

      DecisionRecord dr = null; 
      for (int i = size-1; i >= 0; i--){
          dr = (DecisionRecord) decisionHistoryVec.get(i);
          ContextNamePrincipal cnp = null;
          try {
              cnp = new ContextNamePrincipal (dr.getContextInstance());
          } catch (Exception e) {
          }
          ContextNamePrincipal cnpInstantiated = policyDN.instantiate(cnp );
          if (cnpInstantiated == null) {
              continue; 
          }
          if ( instanceDNInstantiated.equals( cnpInstantiated ) ){
              decisionHistoryVec.remove(i);
//              System.out.println("retainedADI removing " + i);
          }
      }

  }

}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -