IBMSOFT

          ibmsoft 努力不一定成功,放棄一定失敗! 堅持自己的理想,實現自己的目標! 有好的想法就要出想辦法實現!

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            8 Posts :: 2 Stories :: 3 Comments :: 0 Trackbacks

          2006年8月11日 #

          http://www.aygfsteel.com/youxia/archive/2007/03/01/101320.html
          posted @ 2007-03-05 23:40 ibmsoft 閱讀(103) | 評論 (0)編輯 收藏

          http://forum.springside.org.cn/viewthread.php?tid=927&highlight=%E6%9D%83%E9%99%90
          簡單實用一分鐘上手級權限控制

          找回來自己以前的一個項目, 用的是通過filter過濾來管理權限的方法, 很簡單,但也很實用。 這個項目并不小,但這么一個類就已經可以滿足其權限管理的需要了,所以其實很多時候,權限管理大家并不必要想得那么復雜, 對于不少系統,簡單通過filter來管理就ok了, simple 也是一種美^_^ 在web.xml里加入

          1. <!--================權限?設置================-->??
          2. <filter>??
          3. ????<filter-name>Authentication</filter-name>??
          4. ????<filter-class>com.springside.demo.security.UrlFilter</filter-class>??
          5. ????<init-param>??
          6. ????????<param-name>onError</param-name>??
          7. ????????<param-value>/login.jsp</param-value>??
          8. ????</init-param>??
          9. </filter>??
          10. <filter-mapping>??
          11. ????<filter-name>Authentication</filter-name>??
          12. ????<!--?只過濾?.jsp?結尾的url,?其余的如?.do,?.html,?.jpg,?.css?等不作過濾-->??
          13. ????<url-pattern>*.jsp</url-pattern>??
          14. </filter-mapping>??

          ?

          UrlFilter filter類的實現

          1. public?class?UrlFilter?implements?Filter?{??
          2. ????private?FilterConfig?filterConfig;??
          3. ??
          4. ????private?FilterChain?chain;??
          5. ??
          6. ????private?HttpServletRequest?request;??
          7. ??
          8. ????private?HttpServletResponse?response;??
          9. ??
          10. ????public?void?destroy()?{??
          11. ????????this.filterConfig?=?null;??
          12. ????}??
          13. ??
          14. ????public?void?init(FilterConfig?filterConfig)?throws?ServletException?{??
          15. ????????this.filterConfig?=?filterConfig;??
          16. ????}??
          17. ??
          18. ????public?void?doFilter(ServletRequest?servletRequest,??
          19. ????????????ServletResponse?servletResponse,?FilterChain?chain)??
          20. ????????????throws?IOException,?ServletException?{??
          21. ????????this.chain?=?chain;??
          22. ????????this.request?=?(HttpServletRequest)?servletRequest;??
          23. ????????this.response?=?((HttpServletResponse)?servletResponse);??
          24. ??
          25. ????????String?url?=?request.getServletPath();??
          26. ????????if?(url?==?null)??
          27. ????????????url?=?"";??
          28. ??
          29. ????????//?獲取session中的loginuser對象??
          30. ????????HttpSession?session?=?request.getSession();??
          31. ????????LoginUser?loginuser?=?(LoginUser)?session.getAttribute("loginuser");??
          32. ??
          33. ????????if?(baseUrl(url,?request))?{??
          34. ????????????//?如果是登陸界面等無須<u><b><font?color="#FF0000">權限</font></b></u>訪問的的公用界面則跳過??
          35. ????????????chain.doFilter(request,?response);??
          36. ????????}?else?if?(loginuser?==?null)?{??
          37. ????????????checkLogin(url);??
          38. ????????}?else?{??
          39. ????????????verifyUrl(url,?loginuser);??
          40. ????????}??
          41. ????}??
          42. ??
          43. ????private?void?checkLogin(String?url)?throws?ServletException,?IOException?{??
          44. ????????//?如果session中獲取不到?loginuser?對象,要不就是session?過期了,要不就是還沒登陸。所以返回登陸界面??
          45. ????????//?在登陸后記得把?loginuser?對象置于?session中??
          46. ??
          47. ????????if?(url.indexOf("/index.jsp")?>=?0??
          48. ????????????????&&?"login".equals(request.getParameter("act")))?{??
          49. ????????????//?獲取request中username,password??
          50. ????????????String?username?=?request.getParameter("username");??
          51. ????????????String?password?=?request.getParameter("password");??
          52. ????????????UserDao?userDao?=?new?UserDao();??
          53. ????????????if?(userDao.authUser(username,?password))?{??
          54. ????????????????LoginUser?user?=?userDao.getUser(username);??
          55. ????????????????request.getSession().setAttribute("loginuser",?user);??
          56. ????????????????verifyUrl(url,user);??
          57. ????????????????return;??
          58. ????????????}??
          59. ????????}??
          60. ????????response.sendRedirect("login.jsp");??
          61. ????}??
          62. ??
          63. ????private?void?verifyUrl(String?url,?LoginUser?loginuser)??
          64. ????????????throws?IOException,?ServletException?{??
          65. ????????//?獲取?loginuser?擁有的所有資源串??
          66. ????????Set?royurl?=?loginuser.getResStrings();??
          67. ????????if?(royurl?!=?null?&&?royurl.size()?>?0?&&?pass(royurl,?url,?request.getParameterMap()))?{??
          68. ????????????chain.doFilter(request,?response);??
          69. ????????}?else?{??
          70. ????????????response.setContentType("text/html;charset=GBK");??
          71. ????????????response??
          72. ????????????????????.getWriter()??
          73. ????????????????????.println(??
          74. ????????????????????????????"<div?style='margin:?100?auto;text-align:?center;"??
          75. ????????????????????????????????????+?"font:?bold?18px?宋體;color:?#0066CC;vertical-align:?middle'>?Sorry,您沒有<u><b><font?color="#FF0000">權限</font></b></u>訪問該資源!</div>");??
          76. ????????}??
          77. ????}??
          78. ??
          79. ????/**?
          80. ?????*?判斷是否是公用界面?
          81. ?????*/??
          82. ????protected?boolean?baseUrl(String?url,?HttpServletRequest?request)?{??
          83. ????????if?(url.indexOf("/login.jsp")?>=?0)?{??
          84. ????????????return?true;??
          85. ????????}??
          86. ????????return?false;??
          87. ????}??
          88. ??
          89. ????/**?
          90. ?????*?判斷該用戶是否有權請求該url?
          91. ?????*??
          92. ?????*?@param?royurl?
          93. ?????*????????????user擁有的授權的的url串集合?
          94. ?????*?@param?url?
          95. ?????*????????????當前請求的url?
          96. ?????*?@param?reqmap?
          97. ?????*????????????當前request的參數?
          98. ?????*?@return?是否通過該url?
          99. ?????*/??
          100. ????protected?boolean?pass(Set?royurl,?String?url,?Map?reqmap)?{??
          101. ????????boolean?match?=?true;??
          102. ????????for?(Iterator?iter?=?royurl.iterator();?iter.hasNext();)?{??
          103. ????????????//?獲取資源??
          104. ????????????match?=?true;??
          105. ????????????String?res_string?=?(String)?iter.next();??
          106. ????????????if?(res_string.indexOf("*")?>?0)?{??
          107. ????????????????res_string?=?res_string.substring(0,?res_string.indexOf("*"));??
          108. ????????????????if?(url.substring(0,?res_string.length()).equalsIgnoreCase(??
          109. ????????????????????????res_string))?{??
          110. ????????????????????return?true;?//?增加通配符比較??
          111. ????????????????}??
          112. ????????????}??
          113. ????????????//?分割url與參數??
          114. ????????????String[]?spw?=?res_string.split("\\?");?//?用"\\?"?轉義后即可得到正確的結??
          115. ????????????if?(!url.equalsIgnoreCase(spw[0]))?{??
          116. ????????????????match?=?false;??
          117. ????????????}??
          118. ????????????if?(match?&&?spw.length?>?1)?{??
          119. ????????????????String[]?spa?=?spw[1].split("\\&");?//?分拆各參數??
          120. ????????????????for?(int?j?=?0;?j?<?spa.length;?j++)?{??
          121. ????????????????????String[]?spe?=?spa[j].split("=");?//?分拆鍵與值??
          122. ????????????????????String?key?=?spe[0];??
          123. ????????????????????String?value?=?"";??
          124. ????????????????????if?(spe.length?>?1)?{??
          125. ????????????????????????value?=?spe[1].trim();??
          126. ????????????????????}??
          127. ??
          128. ????????????????????//?輪詢??
          129. ????????????????????String[]?values?=?(String[])?reqmap.get(key);??
          130. ????????????????????if?(values?!=?null)?{??
          131. ????????????????????????for?(int?k?=?0;?k?<?values.length;?k++)?{??
          132. ????????????????????????????if?(value.equalsIgnoreCase(values[k]))?{??
          133. ????????????????????????????????match?=?true;??
          134. ????????????????????????????????break;??
          135. ????????????????????????????}??
          136. ????????????????????????????match?=?false;??
          137. ????????????????????????}??
          138. ????????????????????????if?(!match)?{??
          139. ????????????????????????????break;??
          140. ????????????????????????}??
          141. ????????????????????}??
          142. ????????????????}??
          143. ??
          144. ????????????}??
          145. ??
          146. ????????????if?(match)?{??
          147. ????????????????break;??
          148. ????????????}??
          149. ????????}??
          150. ????????return?match;??
          151. ????}??
          152. ??
          153. ????public?static?void?main(String[]?args)?{??
          154. ????????UrlFilter?filter?=?new?UrlFilter();??
          155. ????????String?url?=?"/baseProd/product.do";??
          156. ??
          157. ????????Map?reqmap?=?new?HashMap();??
          158. ????????//?當前請求productline參數是11,12??
          159. ????????reqmap.put("productline",?new?String[]?{?"11",?"12"?});??
          160. ??
          161. ????????String?str;??
          162. ????????Set?royurl?=?new?HashSet();??
          163. ??
          164. ????????//?和授權的的url根本不同,false??
          165. ????????royurl.add("/user.do?a=1&b=2");??
          166. ????????System.out.println("match?false:"?+?filter.pass(royurl,?url,?reqmap));??
          167. ????????//?授權的請求參數13,14時?false??
          168. ????????royurl.add("/baseProd/product.do?productline=13&productline=14");??
          169. ????????System.out.println("match?false:"?+?filter.pass(royurl,?url,?reqmap));??
          170. ????????//?授權的請求參數11,13時?false??
          171. ????????royurl.add("/baseProd/product.do?productline=11&productline=13");??
          172. ????????System.out.println("match?false:"?+?filter.pass(royurl,?url,?reqmap));??
          173. ??
          174. ????????//?授權的請求參數11時?true??
          175. ????????royurl.add("/baseProd/product.do?productline=11");??
          176. ????????System.out.println("match?true:"?+?filter.pass(royurl,?url,?reqmap));??
          177. ??
          178. ????????//?參數的不論順序?true??
          179. ????????royurl.add("/baseProd/product.do?productline=12&productline=11");??
          180. ????????System.out.println("match?true:"?+?filter.pass(royurl,?url,?reqmap));??
          181. ??
          182. ????????royurl.clear();??
          183. ????????//?支持?"*"?號作通配符?true??
          184. ????????royurl.add("/baseProd/product.do*");??
          185. ????????System.out.println("match?ture:"?+?filter.pass(royurl,?url,?reqmap));??
          186. ??
          187. ????}??
          188. ??
          189. }??
          LoginUser 類:
          1. public?class?LoginUser?{??
          2. ????private?String?name;??
          3. ??????
          4. ????//用戶的授權url集合,如"/product.do?line=1&singer=2","/menu.do?son=1&son=2&son=3","/job.do*"??
          5. ????private?Set?resStrings;??
          6. ??
          7. ????public?String?getName()?{??
          8. ????????return?name;??
          9. ????}??
          10. ??
          11. ????public?void?setName(String?name)?{??
          12. ????????this.name?=?name;??
          13. ????}??
          14. ??
          15. ????public?Set?getResStrings()?{??
          16. ????????return?resStrings;??
          17. ????}??
          18. ??
          19. ????public?void?setResStrings(Set?resStrings)?{??
          20. ????????this.resStrings?=?resStrings;??
          21. ????}??
          22. ??????
          23. ??????
          24. }?

          posted @ 2007-03-05 23:38 ibmsoft 閱讀(269) | 評論 (0)編輯 收藏

          http://blog.chinaunix.net/u/11262/showart_213703.html
          http://wiki.springside.org.cn/display/springside/Acegi+Reference

          RBAC初學筆記

          什么是RBAC

          RBAC就是Role-Based Access Control,基于角色的訪問控制。角色訪問控制(RBAC)引入了Role的概念,目的是為了隔離User(即動作主體,Subject)Privilege(權限,表示對Resource的一個操作,即Operation+Resource)更符合企業的用戶、組織、數據和應用特征。

          RBAC的關注點在于RoleuserRoleprivilege的關系,也就是User AssignmentPermission Assignment的關系。

          RBAC有以下優點:

          1減少授權管理的復雜性,降低管理開銷
            2靈活的支持企業的安全策略,對企業的變化有很大的伸縮性

          ?

          解決復雜的權限管理問題的過程可以抽象概括為:判斷【Who是否可以對What進行How的訪問操作(Operator】這個邏輯表達式的值是否為True的求解過程。

          RBAC中的幾個重要概念:

          l???????? Who權限的擁有者或主體。典型的有PrincipalUserGroupRoleActor等等。跟授權有關系的實體就只有角色(Role)和用戶(User)。譬如:業務經理(Role),張三(User

          Role作為一個用戶(User)與權限(Privilege)的代理層,解耦了權限和用戶的關系,所有的授權應該給予Role而不是直接給UserGroup。基于角色的訪問控制方法的思想就是把對用戶的授權分成兩部份,用角色來充當用戶行駛權限的中介。角色是一組訪問權限的集合,一個用戶可以是很多角色的成員,一個角色也可以有很多個權限,而一個權限也可以重復配置于多個角色。

          User用戶就是一個可以獨立訪問計算機系統中的數據或者用數據表示的其它資源的主體,我們用USERS表示一個用戶集合。用戶在一般情況下是指人。

          Group:是一組相關user的集合。Usergroup繼承出來,也就具有了該group的角色權限。

          個人覺得可以這么認為,role是抽象化了的usergroup

          l???????? What權限針對的資源(Resource)(包括資源類別(the type of Resource)和資源實例(the instance of Resource))。譬如:報表。

          粗粒度:表示類別級,即僅考慮對象的類別(the type of object),不考慮對象的某個特定實例。比如,用戶管理中,創建、刪除,對所有的用戶都一視同仁,并不區分操作的具體對象實例。

          細粒度:表示實例級,即需要考慮具體對象的實例(the instance of object),當然,細粒度是在考慮粗粒度的對象類別之后才再考慮特定實例。比如,合同管理中,列表、刪除,需要區分該合同實例是否為當前用戶所創建。

          l???????? How亦作action,表示某種訪問方法(亦請參考Operator條目解釋)。譬如:刪除。

          l? Operator操作。表示施加于WhatHow動作。是一種Resource Related的概念,單獨的How動作是沒有實際意義的,譬如:刪除;只有與具體資源結合在一起才有意義,譬如:刪除報表。

          下面的圖展示了user,group,role,how的關系

          ?

          權限系統的核心由以下三部分構成:

          1.????? 創造權限

          2.?????? 分配權限

          3.?????? 使用權限

          ?

          系統各部分的主要參與者對照如下:

          1.創造權限 - Programer創造,

          2.分配權限 - Administrator 分配,

          3.使用權限– User

          ?

          ?
          1. Programer 向權限系統提供 Operator = Privilege + Resource
          2. Administrator 利用 Operator 這個基本元素,來創造他理想中的權限模型。
            如,創建角色,創建用戶組,給用戶組分配用戶,將用戶組與角色關聯等等...
            這些操作都是由 Administrator 來完成的.
          3. User 使用 Administrator 分配給的權限去使用各個系統。
          程序員只要回答一個問題,就是, 什么權限可以訪問什么資源,也就是前面說的 Operator。程序員提供 Operator 就意味著給系統穿上了盔甲。Administrator 就可以按照他的意愿來建立他所希望的權限框架。Operator是這個系統中最關鍵的部分,它是一個紐帶,一個系在ProgrammerAdministratorUser之間的紐帶。
          posted @ 2007-03-05 23:10 ibmsoft 閱讀(240) | 評論 (0)編輯 收藏

          http://www.pagebreeze.com/
          posted @ 2007-03-03 16:27 ibmsoft 閱讀(856) | 評論 (2)編輯 收藏

          好久沒有學習搞web開發了,最近要弄一個東西,又把appfuse找出來進行研究

          用最新的appfuse1.9.3版本!

          到:http"://appfuse.org/下載appfuse1.93

          用idea打開
          只需要修改properties.xml中的
          ????<!--?Defaults?for?database.properties?-->
          ????
          <property?name="database.jar"?location="${mysql.jar}"/>
          ????
          <property?name="database.type"?value="mysql"/>
          ????
          <property?name="database.name"?value="appfuse"/>
          ????
          <property?name="database.host"?value="localhost"/>
          ????
          <property?name="database.username"?value="root"/>
          ????
          <property?name="database.password"?value="root"/>

          把其中的localhost修改成實際的ip就ok了
          比如說是:192.169.0.1:3306,注意一定要加上端口號!

          然后在ant中運行相關的任務:
          我這里的情況是:
          建數據庫表和數據的不走是
          運行 db-prepare--》db-create--》db-load,這樣數據就建上了

          然后deploy,在ie中運行appfuse就ok了!
          posted @ 2006-08-11 16:44 ibmsoft 閱讀(408) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 建平县| 三门峡市| 闸北区| 枣强县| 安西县| 苏尼特右旗| 赤峰市| 龙泉市| 曲沃县| 梨树县| 安达市| 中超| 都安| 富民县| 泉州市| 额济纳旗| 天长市| 油尖旺区| 浏阳市| 曲阳县| 团风县| 尉犁县| 胶州市| 察隅县| 抚顺县| 水富县| 沧州市| 桃源县| 个旧市| 华容县| 南阳市| 泸西县| 蒲江县| 沁源县| 沁水县| 家居| 榆林市| 桂平市| 绿春县| 钦州市| 威海市|