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

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

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

    posts - 75,comments - 83,trackbacks - 0
    用SERVLET過濾來實(shí)現(xiàn)權(quán)限控制

    簡介

    過濾是SERVLET23規(guī)范新有的功能,目前TOMCAT4WEBLOGIC7都已支持。它能實(shí)現(xiàn)很多以前使用不便或很難實(shí)現(xiàn)的功能,在產(chǎn)品體系中,我們可以很好地使用SERVLET過濾,使得各個部件可以在保持系統(tǒng)統(tǒng)一權(quán)限控制的前提下,來實(shí)現(xiàn)各個獨(dú)自的個性權(quán)限系統(tǒng)。

    下面先看下SERVLET過濾是如何工作的,如下圖

    優(yōu)點(diǎn)

    和傳統(tǒng)架構(gòu)相比,SERVLET過濾的優(yōu)點(diǎn)如下:

    在傳統(tǒng)架構(gòu)中:

    • 每次接受到請求,掛鉤式方法就被調(diào)用,不論它們是否執(zhí)行(有時(shí)甚至是空的)。
    • 方法的作用域及并發(fā)關(guān)系(每個方法可能在不同的線程上被調(diào)用)不允許在處理相同的請求時(shí)簡單、高效地共享不同掛鉤式方法調(diào)用間的變量和信息。

    SERVLET過濾中:

    • 嵌套的方法調(diào)用通過一系列過濾器實(shí)現(xiàn),它僅有應(yīng)用于當(dāng)前請求的過濾器組成;基于掛鉤式調(diào)用的傳統(tǒng)執(zhí)行方式需要在處理短句中調(diào)用掛鉤式例程,即使一個特定短句的處理邏輯不起任何作用。
    • 局部變量在實(shí)際的過濾方法返回之前都作保留,并且可用(因?yàn)樯嫌芜^濾器的調(diào)用總在堆棧上,等待后續(xù)調(diào)用的返回)。

    過濾的實(shí)現(xiàn)

    調(diào)用鏈
    所有過濾器都服從調(diào)用的過濾器鏈,并通過定義明確的接口得到執(zhí)行。一個執(zhí)行過濾器的 Java 類必須執(zhí)行這一
    javax.servlet.Filter 接口。這一接口含有三個過濾器必須執(zhí)行的方法:

    • doFilter(ServletRequest, ServletResponse, FilterChain):這是一個完成過濾行為的方法。這同樣是上游過濾器調(diào)用的方法。引入的FilterChain對象提供了后續(xù)過濾器所要調(diào)用的信息。
    • init(FilterConfig):這是一個容器所調(diào)用的初始化方法。它保證了在第一次doFilter()調(diào)用前由容器調(diào)用。您能獲取在 web.xml 文件中指定的初始化參數(shù)。
    • destroy():容器在破壞過濾器實(shí)例前,doFilter()中的所有活動都被該實(shí)例終止后,調(diào)用該方法。

    嵌套調(diào)用在 doFilter() 方法執(zhí)行中發(fā)生。除非您建立一個過濾器明確阻止所有后續(xù)處理(通過其它過濾器及資源處理器),否則過濾器一定會在 doFilter 方法中作以下的調(diào)用:

    FilterChain.doFilter(request, response);

    ?

    安裝過濾器:定義與映射
    容器通過 Web 應(yīng)用程序中

    的配置描述符 web.xml 文件了解過濾器。有兩個新的標(biāo)記與過濾器相關(guān):<filter><filter-mapping>。應(yīng)該指定它們?yōu)?span lang="EN-US"> web.xml 文件內(nèi) <web-app> 標(biāo)記的子標(biāo)記。

    過濾器定義的元素
    <filter> 標(biāo)記是一個過濾器定義,它必定有一個 <filter- name><filter-class> 子元素。<filter-name> 子元素給出了一個與過濾器實(shí)例相關(guān)的、基于文本的名字。<filter-class> 指定了由容器載入的實(shí)際類。您能隨意地包含一個 <init-param> 子元素為過濾器實(shí)例提供初始化參數(shù)。例如,下面的過濾器定義指定了一個叫做 IE Filter 的過濾器:

    1.首先寫一個權(quán)限過濾filter類,實(shí)現(xiàn)Filter接口

    import?javax.servlet.Filter;
    import?javax.servlet.FilterConfig;
    import?javax.servlet.ServletException;
    import?javax.servlet.ServletRequest;
    import?javax.servlet.ServletResponse;
    import?javax.servlet.FilterChain;
    import?java.io.IOException;
    import?javax.servlet.http.HttpServletRequest;
    import?javax.servlet.http.HttpSession;
    import?javax.servlet.http.HttpServletResponse;

    public?class?RightFilter
    ????implements?Filter?{
    ??public?void?init(FilterConfig?filterConfig)?throws?ServletException?{
    ??}

    ??public?void?doFilter(ServletRequest?request,?ServletResponse?response,
    ???????????????????????FilterChain?chain)?throws?IOException,?ServletException?{
    ????HttpServletRequest?req?=?(HttpServletRequest)?request;
    ????HttpServletResponse?res?=?(HttpServletResponse)?response;
    ????
    ????HttpSession?session?=?req.getSession(true);

    ????//從session里取的用戶名信息
    ????String?username?=?(String)?session.getAttribute("username");
    ????
    ????//判斷如果沒有取到用戶信息,就跳轉(zhuǎn)到登陸頁面
    ????if?(username?==?null?||?"".equals(username))?{
    ??????//跳轉(zhuǎn)到登陸頁面
    ??????res.sendRedirect("http://"+req.getHeader("Host")+"/login.jsp");
    ????}
    ????else?{
    ??????//已經(jīng)登陸,繼續(xù)此次請求
    ??????chain.doFilter(request,response);
    ????}
    ??}

    ??public?void?destroy()?{
    ??}
    }?

    2.然后在web.xml里配置需要登陸權(quán)限驗(yàn)證的JSP文件:???
    ?a.如果是某個具體的JSP文件(如a.jsp)需要登陸驗(yàn)證

    <web-app>
    ??
    ??
    <filter>
    ????
    <filter-name>right</filter-name>
    ????
    <filter-class>com.taihuatalk.taihua.common.RightFilter</filter-class>
    ??
    </filter>

    ??
    <filter-mapping>
    ????
    <filter-name>right</filter-name>
    ????
    <url-pattern>/a.jsp</url-pattern>
    ??
    </filter-mapping>
    ??
    </web-app>

    ?? b.如果是某一個目錄(如a/目錄)整個目錄下的文件都需要登陸驗(yàn)證:

    <web-app>
    ??
    ??
    <filter>
    ????
    <filter-name>right</filter-name>
    ????
    <filter-class>com.taihuatalk.taihua.common.RightFilter</filter-class>
    ??
    </filter>

    ??
    <filter-mapping>
    ????
    <filter-name>right</filter-name>
    ????
    <url-pattern>/a/*</url-pattern>
    ??</filter-mapping>
    ??
    </web-app>
    posted on 2008-03-31 15:27 梓楓 閱讀(9668) 評論(9)  編輯  收藏

    FeedBack:
    # re: 使用filter過濾器實(shí)現(xiàn)登陸權(quán)限驗(yàn)證
    2008-12-20 13:34 | 阿星
    很好 通俗易懂,謝謝了!  回復(fù)  更多評論
      
    # re: 使用filter過濾器實(shí)現(xiàn)登陸權(quán)限驗(yàn)證 [未登錄]
    2009-01-01 20:55 | sky
    不錯,簡單易懂,謝了  回復(fù)  更多評論
      
    # re: 使用filter過濾器實(shí)現(xiàn)登陸權(quán)限驗(yàn)證 [未登錄]
    2009-05-11 16:18 | abc
    你這個好像只能驗(yàn)證訪問a.jsp頁面的驗(yàn)證,其它頁面不行  回復(fù)  更多評論
      
    # re: 使用filter過濾器實(shí)現(xiàn)登陸權(quán)限驗(yàn)證
    2009-06-06 03:48 | 蝴蝶世界
    我想玩地下城與勇士  回復(fù)  更多評論
      
    # re: 使用filter過濾器實(shí)現(xiàn)登陸權(quán)限驗(yàn)證
    2009-06-13 11:04 | wc
    根據(jù)具體的web 請求進(jìn)行過濾
    很好的舉例  回復(fù)  更多評論
      
    # re: 使用filter過濾器實(shí)現(xiàn)登陸權(quán)限驗(yàn)證
    2010-09-19 14:35 | t
    這寫的有問題  回復(fù)  更多評論
      
    # re: 使用filter過濾器實(shí)現(xiàn)登陸權(quán)限驗(yàn)證 [未登錄]
    2010-10-27 11:57 | dd
    xiexie  回復(fù)  更多評論
      
    # : 使用filter過濾器實(shí)現(xiàn)登陸權(quán)限驗(yàn)證 [未登錄]
    2011-08-10 16:24 | 菜鳥
    .如果是某一個目錄(如a/目錄)整個目錄下的文件都需要登陸驗(yàn)證:
    有問題!
    測試過了  回復(fù)  更多評論
      
    # re: 使用filter過濾器實(shí)現(xiàn)登陸權(quán)限驗(yàn)證
    2013-04-08 21:27 | 空氣過濾器www.iguolvqi.com
    嵌套的方法調(diào)用通過一系列過濾器實(shí)現(xiàn),它僅有應(yīng)用于當(dāng)前請求的過濾器組成;基于掛鉤式調(diào)用的傳統(tǒng)執(zhí)行方式需要在處理短句中調(diào)用掛鉤式例程,即使一個特定短句的處理邏輯不起任何作用。
    局部變量在實(shí)際的過濾方法返回之前都作保留,并且可用(因?yàn)樯嫌芜^濾器的調(diào)用總在堆棧上,等待后續(xù)調(diào)用的返回)  回復(fù)  更多評論
      

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲成AV人在线观看网址| 亚洲日本一区二区三区在线| 污污免费在线观看| 亚洲人成电影网站色| 亚洲国产日韩在线观频| 91福利视频免费观看| 精品亚洲av无码一区二区柚蜜| 国产亚洲精品观看91在线| 野花高清在线电影观看免费视频 | 亚洲精品国产精品乱码不卡| 成人片黄网站色大片免费观看APP| 亚洲一区电影在线观看| 亚洲精品动漫人成3d在线| 91成人在线免费观看| 成年网站免费入口在线观看 | 午夜影视日本亚洲欧洲精品一区| 免费无码黄动漫在线观看| 你懂的免费在线观看网站| 羞羞漫画页面免费入口欢迎你| 久久亚洲精品无码aⅴ大香| 亚洲精品成人网久久久久久| 国产精品怡红院永久免费| 国产免费播放一区二区| 亚洲无人区一区二区三区| 免费鲁丝片一级在线观看| 三年片在线观看免费大全电影| 黄页网址大全免费观看12网站| 亚洲妇女水蜜桃av网网站| 亚洲精品无码专区在线在线播放 | 黄网站色在线视频免费观看| 人妻免费一区二区三区最新| 国产精品亚洲小说专区| 亚洲va在线va天堂va手机| 亚洲国产精品久久久久婷婷老年 | 美女网站免费福利视频| 亚洲熟妇无码一区二区三区导航| 亚洲乱亚洲乱淫久久| 最新亚洲成av人免费看| 成人亚洲综合天堂| 一区二区三区四区免费视频 | 中国毛片免费观看|