<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    IBMSOFT

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

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

    2006年6月14日 #

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

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

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

    1. <!--================權(quán)限?設(shè)置================-->??
    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?結(jié)尾的url,?其余的如?.do,?.html,?.jpg,?.css?等不作過濾-->??
    13. ????<url-pattern>*.jsp</url-pattern>??
    14. </filter-mapping>??

    ?

    UrlFilter filter類的實現(xiàn)

    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">權(quán)限</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">權(quán)限</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. ?????*?判斷該用戶是否有權(quán)請求該url?
    91. ?????*??
    92. ?????*?@param?royurl?
    93. ?????*????????????user擁有的授權(quán)的的url串集合?
    94. ?????*?@param?url?
    95. ?????*????????????當(dāng)前請求的url?
    96. ?????*?@param?reqmap?
    97. ?????*????????????當(dāng)前request的參數(shù)?
    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與參數(shù)??
    114. ????????????String[]?spw?=?res_string.split("\\?");?//?用"\\?"?轉(zhuǎn)義后即可得到正確的結(jié)??
    115. ????????????if?(!url.equalsIgnoreCase(spw[0]))?{??
    116. ????????????????match?=?false;??
    117. ????????????}??
    118. ????????????if?(match?&&?spw.length?>?1)?{??
    119. ????????????????String[]?spa?=?spw[1].split("\\&");?//?分拆各參數(shù)??
    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. ????????//?當(dāng)前請求productline參數(shù)是11,12??
    159. ????????reqmap.put("productline",?new?String[]?{?"11",?"12"?});??
    160. ??
    161. ????????String?str;??
    162. ????????Set?royurl?=?new?HashSet();??
    163. ??
    164. ????????//?和授權(quán)的的url根本不同,false??
    165. ????????royurl.add("/user.do?a=1&b=2");??
    166. ????????System.out.println("match?false:"?+?filter.pass(royurl,?url,?reqmap));??
    167. ????????//?授權(quán)的請求參數(shù)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. ????????//?授權(quán)的請求參數(shù)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. ????????//?授權(quán)的請求參數(shù)11時?true??
    175. ????????royurl.add("/baseProd/product.do?productline=11");??
    176. ????????System.out.println("match?true:"?+?filter.pass(royurl,?url,?reqmap));??
    177. ??
    178. ????????//?參數(shù)的不論順序?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. ????//用戶的授權(quán)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 閱讀(268) | 評論 (0)編輯 收藏

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

    RBAC初學(xué)筆記

    什么是RBAC

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

    RBAC的關(guān)注點在于RoleuserRoleprivilege的關(guān)系,也就是User AssignmentPermission Assignment的關(guān)系。

    RBAC有以下優(yōu)點:

    1減少授權(quán)管理的復(fù)雜性,降低管理開銷
      2靈活的支持企業(yè)的安全策略,對企業(yè)的變化有很大的伸縮性

    ?

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

    RBAC中的幾個重要概念:

    l???????? Who權(quán)限的擁有者或主體。典型的有PrincipalUserGroupRoleActor等等。跟授權(quán)有關(guān)系的實體就只有角色(Role)和用戶(User)。譬如:業(yè)務(wù)經(jīng)理(Role),張三(User

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

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

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

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

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

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

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

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

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

    下面的圖展示了user,group,role,how的關(guān)系

    ?

    權(quán)限系統(tǒng)的核心由以下三部分構(gòu)成:

    1.????? 創(chuàng)造權(quán)限

    2.?????? 分配權(quán)限

    3.?????? 使用權(quán)限

    ?

    系統(tǒng)各部分的主要參與者對照如下:

    1.創(chuàng)造權(quán)限 - Programer創(chuàng)造,

    2.分配權(quán)限 - Administrator 分配,

    3.使用權(quán)限– User

    ?

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

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

    好久沒有學(xué)習(xí)搞web開發(fā)了,最近要弄一個東西,又把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中運行相關(guān)的任務(wù):
    我這里的情況是:
    建數(shù)據(jù)庫表和數(shù)據(jù)的不走是
    運行 db-prepare--》db-create--》db-load,這樣數(shù)據(jù)就建上了

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

    ?1?/*
    ?2??*?Copyright?(c)?2006?Your?Corporation.?All?Rights?Reserved.
    ?3??*/
    ?4?package?liuxuan;
    ?5?
    ?6?/**
    ?7??*?Created?by?IntelliJ?IDEA.
    ?8??*?User:?Administrator
    ?9??*?Date:?2006-7-26
    10??*?Time:?15:33:49
    11??*?To?change?this?template?use?File?|?Settings?|?File?Templates.
    12??*/
    13?import?org.htmlparser.Node;
    14?import?org.htmlparser.Parser;
    15?import?org.htmlparser.http.ConnectionManager;
    16?import?org.htmlparser.tags.LinkTag;
    17?import?org.htmlparser.util.ParserException;
    18?import?org.htmlparser.visitors.ObjectFindingVisitor;
    19?
    20?import?java.sql.Statement;
    21?import?java.sql.DriverManager;
    22?import?java.sql.Connection;
    23?import?java.sql.SQLException;
    24?
    25?public?class?LinkDemo
    26?{
    27?????public?static?void?main?(String[]?args)?throws?ParserException,?SQLException
    28?????{
    29?????????ConnectionManager?cn?=?new?ConnectionManager();
    30?????????cn.setProxyHost("10.75.1.38");
    31?????????cn.setProxyPort(80);
    32?????????Parser.setConnectionManager(cn);
    33?????????Parser?parser;
    34?????????//parser.s
    35?????????String[]?pyurl?=?new?String[2]?;
    36?
    37?????????pyurl[0]="http://www.google.cn/search?num=100&hl=zh-CN&newwindow=1&q=%E6%BF%AE%E9%98%B3&btnG=%E6%90%9C%E7%B4%A2&meta=cr%3DcountryCN";
    38?????????pyurl[1]="http://www.google.cn/search?q=%E6%BF%AE%E9%98%B3&num=100&hl=zh-CN&lr=&cr=countryCN&newwindow=1&start=100&sa=N";
    39?????????for?(int?j=0;j<pyurl.length;j++)?{
    40?????????????parser?=?new?Parser?(pyurl[j]);
    41?????????????ObjectFindingVisitor?visitor?=?new?ObjectFindingVisitor?(LinkTag.class);
    42?????????????parser.visitAllNodesWith?(visitor);
    43?????????????Node[]?links?=?visitor.getTags?();
    44?????????????String?sql;
    45?????????????????try?{
    46?????????????????????????Class.forName("com.mysql.jdbc.Driver");
    47?????????????????????}?catch?(ClassNotFoundException?e)?{
    48?????????????????????????e.printStackTrace();??//To?change?body?of?catch?statement?use?File?|?Settings?|?File?Templates.
    49?????????????????????}
    50?????????????????????Connection?conn?=?null;
    51?????????????????????try?{
    52?????????????????????????conn?=?DriverManager.getConnection("jdbc:mysql://localhost:3306/crawdb",?"root",?"root");
    53?????????????????????}?catch?(SQLException?e)?{
    54?????????????????????????e.printStackTrace();??//To?change?body?of?catch?statement?use?File?|?Settings?|?File?Templates.
    55?????????????????????}
    56??????????????Statement?stmt?=?conn.createStatement();
    57?????????????for?(int?i?=?0;?i?<?links.length;?i++)
    58?????????????{
    59?????????????????????sql="";
    60?????????????????LinkTag?linkTag?=?(LinkTag)links[i];
    61?????????????????if?(linkTag.getLink().indexOf("cache")<0?&&??linkTag.getLink().indexOf("google")<0?&&linkTag.getLinkText().indexOf("濮陽")>0)??{
    62?
    63?
    64???????????????????????sql="insert?into?urls(name,note,url)?values('"+linkTag.getLinkText?()+"','"+"lixuan"+"','"+linkTag.getLink?()+"')";
    65???????????????????????stmt.executeUpdate(sql);
    66?????????????????????????//rs.close();
    67?
    68?????????????????????System.out.print?("\""?+?linkTag.getLinkText?()?+?"\"?=>?");
    69?????????????????System.out.println?(linkTag.getLink?());
    70?????????????????}
    71?????????????}
    72??????????????stmt.close();
    73??????????????conn.close();
    74?????????}
    75?????}
    76?
    77?}
    78?

    posted @ 2006-07-25 17:26 ibmsoft 閱讀(338) | 評論 (0)編輯 收藏

    • I use nutch to crawl the intranet.but you know ,the cache.jsp have mang problem (X).Because I filter the gif|jgf and so on
      then I use ORO replace the html content use my customer pif
      Code:
      ?1????String?sRegexpSrc="src\\s*=\\s*\"([\\.]*)/([a-z]*)/([^\"]+)";
      ?2????String?sRegxpBackground?="background\\s*=\\s*\"([.]*)/([a-z]*)/([^\"]+)";
      ?3????String?sAdd?=?"";
      ?4????String?sNewContent="";
      ?5????PatternCompiler?compiler?=?new?Perl5Compiler();
      ?6????Pattern?pattern?=?null,pattern1?=?null?;
      ?7????try{
      ?8????????pattern?=?compiler.compile(sRegexpSrc,Perl5Compiler.CASE_INSENSITIVE_MASK);
      ?9????????pattern1?=?compiler.compile(sRegxpBackground,Perl5Compiler.CASE_INSENSITIVE_MASK);
      10????}
      catch?(MalformedPatternException?e){
      11????????
      12????????e.printStackTrace();
      13????}

      14????PatternMatcher?matcher?=?new?Perl5Matcher();
      15
      16if?(matcher.contains(content,?pattern)){
      17????????????????????MatchResult?result?=?matcher.getMatch();
      18????????????????????//System.out.println(result.toString());
      19????????????????????sAdd?=?result.group(1)+"/"+result.group(2)+"/"+result.group(3);
      20????????????????????//System.out.println("sAdd=?"+sAdd);
      21????????????????????sNewContent=content.replaceAll(sAdd,"\\img\\liuxuan");
      22????????????????????//System.out.println("FinalString="+sTest.replaceAll(sAdd,"/img/liuxuan.png"));
      23????????????//System.out.print("sTest=?"+result.group(1)+"/"+result.group(2));
      24????????}
      else{
      25????????????//System.out.print("Can't?find?the?String?");
      26
      27????????}

    posted @ 2006-06-28 21:03 ibmsoft 閱讀(342) | 評論 (0)編輯 收藏

    ?

    我這里講的不是怎么使用搜索引擎,而是怎么讓程序利用搜索引擎來搜集網(wǎng)址,這有什么用?很有用!網(wǎng)上動輒有人叫賣網(wǎng)址數(shù)據(jù)庫,如發(fā)布軟件網(wǎng)址、郵件地址、論壇網(wǎng)址、行業(yè)網(wǎng)址,這些網(wǎng)址是怎么來的呢?不可能是人手工收集而來的,都是讓程序利用搜索引擎取到的,如果您需要某類網(wǎng)址信息數(shù)據(jù),就跟我來一起研究一下,非常簡單。

      本文采用Java語言寫成,以google和百度搜索引擎為對象。

      我們要利用google、百度搜索引擎的搜索規(guī)則中的兩條,關(guān)鍵字搜索和inurl搜索。什么是inurl搜索,就是你所要搜索的網(wǎng)址中本身帶有的關(guān)鍵字,比如http://www.xxx.com/post.asp ,這個網(wǎng)址就含有post.asp這樣的關(guān)鍵字,在搜索引擎中填寫規(guī)則是 inurl:post.asp,這是收集網(wǎng)址的關(guān)鍵,因為很多網(wǎng)址本身會帶有特定的信息,比如軟件發(fā)布的網(wǎng)頁網(wǎng)址信息中多含有 publish、submit、tuijian這樣的信息,如http://www.xxx.com/publish.asp,這樣的網(wǎng)址多是發(fā)布信息的網(wǎng)頁,在結(jié)合網(wǎng)頁中本身可能含有的關(guān)鍵字,就可以用搜索引擎搜索出結(jié)果,然后我們利用程序?qū)⒔Y(jié)果取回,對HTML頁面進行分析,去除沒有用的信息,將有用的網(wǎng)址信息寫入文件或者數(shù)據(jù)庫,就可以給其它應(yīng)用程序或者人來使用了。

      第一步,用程序?qū)⑺阉鹘Y(jié)果取回,先以百度為例,比如我們要搜索軟件發(fā)布的網(wǎng)頁,關(guān)鍵字采用 “軟件發(fā)布 版本 inurl:publish.asp",先登錄百度看看,將關(guān)鍵字寫入,然后提交,在地址欄就會看到 http://www.baidu.com/s?ie=gb2312&bs=%C8%ED%BC%FE%B7%A2%B2%BC+%C8%ED%BC%FE%B0%E6%B1%BE+inurl%3Apublish.asp&sr=&z=&cl=3&f=8&wd=%C8%ED%BC%FE%B7%A2%B2%BC+%B0%E6%B1%BE+inurl%3Apublish.asp&ct=0 ,中文關(guān)鍵字全都變成編碼了,沒有關(guān)系,我們在程序中直接用中文也是可以的,其中多個關(guān)鍵字用+號相連,去掉一些沒有用的信息,我們可以把地址優(yōu)化成 http://www.baidu.com/s?lm=0&si=&rn=20&ie=gb2312&ct=0& wd=軟件發(fā)布+版本+inurl%3Apublish%2Easp&pn=0&cl=0,其中rn表示一頁顯示多少個結(jié)果,wd=表示你要搜索的關(guān)鍵字,pn表示從第幾條開始顯示,這個pn將是我們程序循環(huán)取結(jié)果的變量,每20條循環(huán)一次。我們用Java寫的程序來模擬這個搜索的過程,用到的關(guān)鍵類為 java.net.HttpURLConnection,java.net.URL,先寫一個提交搜索的class,關(guān)鍵代碼如下:

    class Search
    {
     public URL url;
     public HttpURLConnection http;
     public java.io.InputStream urlstream;
     ......
     for(int i=0;i++;i <100)
     {
      ......
      try {
       url = new URL("www.baidu.com/s?lm=0&si=&rn=20&ie=gb2312&ct=0& wd=軟件發(fā)布+版本+inurl%3Apublish%2Easp&pn="+beginrecord+"&cl=0");
      }catch(Exception ef){};
      try {
       http = (HttpURLConnection) url.openConnection();
       http.connect();
       urlstream = http.getInputStream();
      }catch(Exception ef){};
      java.io.BufferedReader l_reader = new java.io.
      BufferedReader(new java.io.InputStreamReader(urlstream));
      try {
       while ((currentLine = l_reader.readLine()) != null) {
        totalstring += currentLine;
       }
      } catch (IOException ex3) {}
      ....
      //本次搜索的結(jié)果已經(jīng)放到totalstring中了,是一些HTML代碼,需要下一步進行分析了。
    }
      再以google為例,稍微有些不同,google對瀏覽器進行了一些檢測,編碼也不同,URL為http: //www.google.com/search?q=軟件發(fā)布+版本+inurl:publish.asp&hl=zh-CN&lr= &newwindow=1&start=0&sa=N&ie=UTF-8,其中編碼要用ie=UTF-8,start表示從第幾條記錄顯示,需要注意的是google對瀏覽器還要檢查,如果瀏覽器不符合它的要求,將返回錯誤代碼,所以在模擬瀏覽器提交中,我們要多加一行代碼,修改關(guān)鍵部分要將http屬性中的User-Agent設(shè)置為常用的瀏覽器,比如Mozilla/4.0,代碼如下:

    try {
     http = (HttpURLConnection) url.openConnection();
     http.setRequestProperty("User-Agent", "Mozilla/4.0");
     http.connect();
     urlstream = http.getInputStream();
    }catch(Exception ef){};

      第二步,對取回的HTML編碼進行分析,取出其中的有用網(wǎng)址信息,并寫入文件或者數(shù)據(jù)庫,由于這些搜索引擎都有網(wǎng)頁快照和相似網(wǎng)頁等網(wǎng)址信息混雜在HTML中,我們要將這些網(wǎng)址信息剔除掉,剔除的關(guān)鍵就是找出其中的規(guī)律,百度搜索引擎中的網(wǎng)頁快照和其它沒有用的的地址都含有baidu這個關(guān)鍵字,而google中含有的無用網(wǎng)址信息含有關(guān)鍵字 google和cache,我們就根據(jù)這些關(guān)鍵字剔除無用網(wǎng)址信息。在Java中要對字符串進行分析必然要用到 java.util.StringTokenize這個類,用來將字符串以特定的分隔符分開,java.util.regex.Pattern和 java.util.regex.Matcher用來匹配字符串,關(guān)鍵代碼如下:

    class CompareStr
    {
     public boolean comparestring(String oristring,String tostring)
     {
      Pattern p=null; //正則表達式
      Matcher m=null; //操作的字符串
      boolean b;
      p = Pattern.compile(oristring,Pattern.CASE_INSENSITIVE);
      m = p.matcher(tostring);
      b = m.find();
      return b;
     }
    }

    class AnalyUrl
    {
     ......
     StringTokenizer token = new StringTokenizer(totalstring," <> \"");
     String firstword;
     CompareStrcompstr = new CompareStr();
     String dsturl = null;
     while (token.hasMoreTokens())
     {
      firstword = token.nextToken();
      if (!compstr.comparestring("google.com", firstword) && !compstr.comparestring("cache",firstword))
      {
       if (firstword.length() > 7)
       {
        dsturl = firstword.substring(6,firstword.length() - 1);
        WriteUrl(dsturl); //成功取到URL,記錄到文件中
       }
      }
     }
    }
      通過以上程序,我們就可以收集到自己要的網(wǎng)址信息了,還可以再寫另外一個應(yīng)用程序,對收集到的網(wǎng)址信息進一步分析,取出自己需要的信息,這里就不再累贅,道理都是一樣的。最后需說明一點,google搜索引擎搜索所能返回的結(jié)果不能超過1000條,過了1000條,就直接提示“對不起, Google 為所有查詢的結(jié)果數(shù)都不會超過 1000 個。”,百度搜索引擎返回的結(jié)果不能超過700多條,所以我們要搜索時盡可能多加關(guān)鍵字,將結(jié)果范圍縮小。

    posted @ 2006-06-14 19:50 ibmsoft 閱讀(772) | 評論 (1)編輯 收藏

    主站蜘蛛池模板: 亚洲AⅤ视频一区二区三区| 国产在线19禁免费观看| 岛国av无码免费无禁网站| 嫩草影院免费观看| 亚洲JIZZJIZZ中国少妇中文| 亚洲人成人一区二区三区| 亚洲精品国产免费| 精品韩国亚洲av无码不卡区| A国产一区二区免费入口| 最近中文字幕电影大全免费版| 成人奭片免费观看| 国产国拍亚洲精品福利 | 中文字幕亚洲不卡在线亚瑟| 久久精品国产精品亚洲色婷婷| 亚洲国产成人久久77| 美女18一级毛片免费看| 国产一区二区免费视频| 最近最新MV在线观看免费高清| 免费又黄又爽又猛的毛片| 亚洲国产成人久久综合一| 亚洲成av人片天堂网无码】| 中文字幕免费播放| 欧美三级在线电影免费| 亚洲熟妇少妇任你躁在线观看无码| 亚洲午夜免费视频| 亚洲.国产.欧美一区二区三区| 日本免费高清视频| 夜夜爽免费888视频| 亚洲人成人无码网www电影首页 | 亚洲aⅴ无码专区在线观看春色| 一级成人a做片免费| 午夜免费1000部| 久久久久亚洲AV成人网| 亚洲午夜久久久久久尤物| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 日韩精品无码永久免费网站| 91福利免费视频| jizzjizz亚洲| 亚洲日本人成中文字幕| 久久免费香蕉视频| 女人让男人免费桶爽30分钟|