2017年2月16日 星期四

JAVA-Struts2 攔截器 Interceptor ( 一 )__說明

想必大家之前也聽過 Filter
結果現在又跑出一個 Interceptor ( 攔截器 )

此功能可用於資料的判斷,比如:
1 . 此使用者是否已經登入
2 . 此使用者是否靜置不動一段時間
...等

這些都是很實用的功能

要講述此功能前要先講一個情境
以便於日後更快了解要如何實際應用
現在有兩個頁面
A : 歡迎頁面
B : 會員資料頁面( 需通過攔阻器的驗證才可進入 )














想必大家都知道攔阻器的功能吧
我們來把 A 和 B 串成一個流程
這就是大家最熟悉的登入會員流程了





















以下開始講程式面的說明
通常都是把攔阻器寫在 struts.xml 檔案內
攔阻器的設置如下
這部分只是類似宣告
還未開始被使用
<!-- 攔截器 -->
<interceptors>
    <!-- (單一)宣告自定義攔截器 -->
    <interceptor name="MyInterceptor" class="com.brian.example.interceptor.MyInterceptor"></interceptor>
    
    <!-- (組合)定義其他攔截器,可引用其他攔截器 -->
    <interceptor-stack name="defaultInterceptorStack">
        <interceptor-ref name="MyInterceptor"></interceptor-ref>
        <interceptor-ref name="i18n"></interceptor-ref>
        <interceptor-ref name="defaultStack"></interceptor-ref>
    </interceptor-stack>
    
    <!-- (組合)定義其他攔截器,可引用其他攔截器 -->
    <interceptor-stack name="defaultInterceptorStack111">
        <interceptor-ref name="defaultStack"></interceptor-ref>
    </interceptor-stack>
    
</interceptors>

以上攔截器設置完後
要如何使用??
1 ) 全域使用:所有的 Action 都先被攔截
皆可替換您在上方設置的任一個攔截器
<interceptors>
.
.
.
</interceptors>
<!-- 以下功能是針對 "全部" action ,所以只要經過 struts.xml 就一定會先經過他-->
<!-- 如果有部分頁面或功能不需要到,就不要使用此功能 -->
<default-interceptor-ref name="MyInterceptor"></default-interceptor-ref>

2 ) 部分使用:針對部分設置的 Action 才被先攔截
皆可替換您在上方設置的任一個攔截器
<interceptors>
.
.
.
</interceptors>
<!-- 只針對此 Action 先前攔截 -->
<action name="data" class="com.brian.example.action.DataAction"
    method="execute">
    <interceptor-ref name="MyInterceptor"/>
    <result name="success">/WEB-INF/jsp/data.jsp</result>
</action>


最後,如果要做自己專屬的攔阻器
必須要實作 Interceptor 
包括以下 :
1 . init:生成時。
2 . destroy:銷毀時。
3 . intercept:監聽,如果有攔截到特定資料,要如何處理。

參考資料:菜鸟学SSH(四)——Struts2拦截器
參考資料:从struts2拦截器到自定义拦截器
參考資料:struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo
參考資料:Struts拦截器及Struts.xml文件详解
歡迎轉載,請註明出處。

沒有留言:

張貼留言