亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

動態Proxy與JavaACL用戶訪問控制機制實現

2019-11-18 11:15:56
字體:
來源:轉載
供稿:網友

  用戶訪問控制(access control )機制總是圍繞粗粒度和細粒度兩個方面來討論:
  粗粒度控制:可以規定訪問整個對象或對象群的某個層,而細粒度控制則總是在方法或屬性層進行控制,比如:
  答應一個文件為只讀是屬于粗粒度控制,而答應對這個文件某行有寫操作則屬于細粒度控制。
  一個好的用戶控制機制當然既答應粗粒度也答應細粒度控制,在Jive中我們看到是使用PRoxy來達到這個目的,但是我們也發現,由于需要對每個類都要進行細粒度控制,所以必然對每個類都要做一個Proxy類,這樣帶來了很多Proxy類,如ForumProxy ForumThreadProxy ForumFactoryProxy等,無形增加了系統復雜性。
  
    使用動態Proxy可以很好的解決這個問題。再結合java.security.acl的ACL機制,我們就可以靈活地實現粗粒度和細粒度的雙重控制。
  
    當一個用戶login后,我們就要在內存中為其建立相應的授權訪問機制,使用java.security.acl可以很方便的建立這樣一個安全系統。
  
    首先任何一個對象都應該有個基本屬性:擁有者 或擁有者所屬組(Windows中每個目錄安全描述符都由4部分構成:對象的創建者、對象所屬的組、自由存取控制和系統存取控制)。
  1. Java acl開始第一步是建立一個主體 Principal,其中SecurityOwner是主體的擁有者: private static final Principal _securityOwner = new PrincipalImpl("SecurityOwner");
  2. 當用戶login進來時,他帶有兩個基本數據:訪問密碼和他要訪問的對象applicationName。首先驗證用戶名和密碼,然后從數據庫中取出其權限數據,建立Permission,這里使用Feature繼續了Permission,在Feature中定義了有關權限的細節數據(如讀 寫 刪)。
  // 取出用戶和被訪問對象之間的權限關系,這種權限關系可能不只一個,也就是說,用戶
  //可能對被訪問對象擁有讀 寫 刪等多個權限,將其打包在HasBTable中。
  Hashtable features = loadFeaturesForUser(sApplicationName, sUserID);
  3. 創建一個用戶對象
  User user = new UserImpl(sUserID, new Hashtable() );
  4. 為這個用戶創建一個活動的acl entry
  addAclEntry( user, features);
  其中最要害的是第四步addAclEntry,我們看看其如何實現的:
  // 為這個用戶創建一個新的Acl entry
  AclEntry newAclEntry = new AclEntryImpl( user);
  
  //遍歷Hashtable features,將其中多種權限加入:
  ....
  feature = (Feature) hFeatures.get(keyName);
  newAclEntry.addPermission( feature );
  ....
  最后也要加入主體擁有者SecurityOwner
  這樣一個安全體系就已經建立完成。
  當你在系統中要檢驗某個用戶使用擁有某個權限,如讀的權利時,只要
  acl.checkPermission(user, feature )就可以,acl是ACL的一個實例,這樣權限檢查就交給
  java.security.acl.ACL 去處理了。
  有了ACL機制后,我們就可以在我們系統中使用動態Proxy模式來對具體對象或方法進行控制,比如,我們有一個Report類,有些用戶可以讀,有些用戶可以寫(哪些用戶可以讀 哪些用戶可以寫,已經在上面ACL里部署完成)。
  從Java 1.3開始, Sun提供了Dynamic Proxy API.為了使動態Proxy能夠工作,第一你必須有一個Proxy接口,還要有一個繼續InvocationHandler的Proxy類。
  在下面的例子中,我們設定有三種用戶:普通人;雇員;經理.權限是這樣:普通人可以讀報告;雇員和經理可以修改報告。
  按通常思維,我們對于讀權限,我們設計一個具備讀的角色類:
  public interface IpersonRO {
  public String getName();
  public String getAddress();
  public String getPhoneNumber();
  }
  類里面都是讀的方法,這是一種粗粒度訪問控制,也就是說把讀寫權限只落實到類(對象)上,這樣的話,我們還要為寫的角色再建一個類,很顯然這不是一個很好的方法,使用動態proxy+acl就可以實現很好的細粒度控制。
  public class ReportProxy implements InvocationHandler
  {
  
  private Map map;
  public static Object newInstance(Map map,Class[] interfaces)
  {
  return Proxy.newProxyInstance(map.getClass().getClassLoader(), interfaces,new ReportProxy(map));
  }
  
  public ReportProxy(Map map)
  {
  this.map = map;
  }
  
  public Object invoke(Object proxy, Method m, Object[] args) throws Throwable
  {
  Object result;
  String methodName = m.getName();
  if (methodName.startsWith("get"))
  {
  if (!acl.checkPermission(user, "read")) return null;
  String name = methodName.substring(
  methodName.indexOf("get")+3);
  return map.get(name);
  }
  else if (methodName.startsWith("set"))
  {
  if (!acl.checkPermission(user, "write")) return null;
  String name = methodName.substring(
  methodName.indexOf("set")+3);
  map.put(name, args[0]);
  return null;
  }
  else if (methodName.startsWith("is"))
  {
  if (!acl.checkPermission(user, "read")) return null;
  String name = methodName.substring(
  methodName.indexOf("is")+2);
  return(map.get(name));
  }
  return null;
  }
  }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美欧洲在线观看| 亚洲最大的免费| 久久网福利资源网站| 国产不卡av在线免费观看| 中文字幕精品影院| 日韩中文字幕在线视频播放| 最新国产成人av网站网址麻豆| 成人免费网站在线| 国产精品黄色影片导航在线观看| 日韩亚洲综合在线| 色偷偷偷亚洲综合网另类| 欧美老肥婆性猛交视频| 久久精品99久久香蕉国产色戒| 亚洲免费小视频| 国产精品va在线播放| 久久天堂电影网| 日韩精品免费在线视频| 中文.日本.精品| 91免费的视频在线播放| 久久久久国产视频| 亚洲国产精品久久久| 国产成人在线一区二区| 欧美激情国产精品| 国产深夜精品福利| 亚洲免费一在线| 久久大大胆人体| 欧洲一区二区视频| 欧美做爰性生交视频| 国产日韩欧美在线播放| 久久久久www| 国产精品91久久久| 亚洲综合日韩中文字幕v在线| 国产日韩亚洲欧美| 亚洲毛片一区二区| 97不卡在线视频| 国产aⅴ夜夜欢一区二区三区| 色777狠狠综合秋免鲁丝| 欧美一级淫片播放口| 国产亚洲欧洲黄色| 亚洲男人的天堂在线播放| 欧美日韩激情视频| 色悠悠久久久久| 亚洲夜晚福利在线观看| 亚洲精品网站在线播放gif| 在线成人免费网站| 亚洲第一视频在线观看| 久久精品电影一区二区| 午夜免费久久久久| 亚洲www永久成人夜色| 久久久久久午夜| 日韩在线视频线视频免费网站| 亚洲天堂免费在线| 奇米一区二区三区四区久久| 久久久久久美女| 久久久精品视频在线观看| 久青草国产97香蕉在线视频| 国产精品小说在线| 91九色国产在线| 日韩视频在线观看免费| 亚洲电影免费观看高清完整版在线观看| 欧美成人三级视频网站| 欧美日本国产在线| 日韩性xxxx爱| 日韩成人在线免费观看| 亚洲在线www| 国产97在线播放| 国产91精品在线播放| 日韩在线视频二区| 尤物tv国产一区| 欧美日韩亚洲一区二区| 69av在线视频| 日韩欧美亚洲国产一区| 国产亚洲综合久久| 日韩精品免费在线观看| 午夜精品久久久久久99热| 国产精品揄拍一区二区| 一区二区成人av| 欧美日韩在线免费观看| 日韩国产欧美精品在线| 91久久嫩草影院一区二区| 欧美日韩另类字幕中文| 九九综合九九综合| 久久中文字幕在线视频| 亚洲国产精品99| 亚洲激情视频网站| 欧美成人免费观看| 91国偷自产一区二区三区的观看方式| 久久久www成人免费精品张筱雨| 国产精品久久在线观看| 久久久国产在线视频| 精品久久中文字幕| 亚洲自拍偷拍区| xxxx欧美18另类的高清| 亚洲aⅴ日韩av电影在线观看| 色综合久久中文字幕综合网小说| 国产精品v片在线观看不卡| 一区二区三区无码高清视频| 欧美精品videossex88| 国产精品影院在线观看| 欧美激情中文字幕在线| 日韩精品极品在线观看播放免费视频| 久久精品这里热有精品| 性欧美长视频免费观看不卡| 亚洲欧美日韩中文在线制服| 亚洲一区二区三区香蕉| 国产精品日韩在线一区| 三级精品视频久久久久| 国产精品三级久久久久久电影| 国产亚洲欧美一区| 国产成人精品久久亚洲高清不卡| 色妞在线综合亚洲欧美| 日本高清+成人网在线观看| 欧美日韩亚洲视频一区| 97热在线精品视频在线观看| 国产成人精品在线| 日本精品久久久久久久| 精品国产一区二区三区四区在线观看| 97成人超碰免| 91wwwcom在线观看| 中文字幕欧美精品在线| 国产精品免费久久久久久| 欧美色图在线视频| 日韩在线精品一区| 成人网在线免费观看| 亚洲综合中文字幕在线观看| 欧美日韩精品中文字幕| 97免费视频在线播放| 欧美一区深夜视频| 亚洲在线观看视频网站| 久久久久中文字幕2018| 亚洲欧美精品一区| 俺去亚洲欧洲欧美日韩| 欧美一级淫片丝袜脚交| 国产视频在线一区二区| 亚洲男人天堂2019| 欧美另类暴力丝袜| 亚洲自拍偷拍福利| 国产一区二区香蕉| 亚洲成人网在线观看| 久久理论片午夜琪琪电影网| 国产精品成人观看视频国产奇米| 国产69久久精品成人看| 夜夜嗨av色综合久久久综合网| 色婷婷亚洲mv天堂mv在影片| 一本色道久久88综合日韩精品| www高清在线视频日韩欧美| 另类专区欧美制服同性| 亚洲天堂成人在线视频| 成人黄色在线播放| 亚洲国产精品人人爽夜夜爽| 精品视频久久久久久久| 九九综合九九综合| 国产午夜精品一区理论片飘花| 亚洲已满18点击进入在线看片| 亚洲男女自偷自拍图片另类| 一二美女精品欧洲| 国产91在线播放精品91| 日韩av免费网站| 欧美激情乱人伦| 欧美高跟鞋交xxxxxhd| 97精品国产97久久久久久| 国产成人av网址| 亚洲第一页自拍| 成人黄色午夜影院|