1. 程式人生 > >struts2 攔截器的配置

struts2 攔截器的配置

最近換了家新公司,主要負責前後臺互動這塊,用的ssh框架,所以我接觸的是struts和前端較多,現在總結一下配置攔截器的一些知識,鞏固一下。

struts2攔截器可以攔截一些請求,比如使用者沒登陸就想訪問某個頁面,比如使用者沒有某個頁面的訪問許可權,卻傳送訪問請求,這些都是要被攔截下來的,基於這些需求,我研究了一下struts2的攔截器。

  要使用攔截器,首先需要在struts.xml中配置,配置檔案如下:

<struts>
        <package name="publicInterceptor" extends="global">

                <
interceptors> <!-- 登入攔截器 --> <interceptor name="logon" class="com.arche.alderman.Interceptor.LoginInterceptor"/> <!-- 登入攔截器堆疊 --> <interceptor-stack name="publicLoginStack"> <interceptor-ref
name="logon"/> <!-- 引用預設的攔截器堆疊 --> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <global-results> <result name="result_json">
/WEB-INF/index/index.jsp</result> </global-results> <action name="public_oper_userLogin" class="com.arche.alderman.mvc.pub.controller.implement.PublicOperAction" method="userLogin"> <interceptor-ref name="publicLoginStack" /> <result name="result_json" type="json"> <param name="root">mResult</param> </result> <result name="input">/WEB-INF/index/index.jsp</result> <result name="association"></result> <result name="engineer"></result> <result name="enterprise"></result> </action> <action name="public_check_*" class="com.arche.alderman.mvc.pub.controller.implement.PublicCheckAction" method="{1}"> <result name="result_json" type="json"> <param name="root">mResult</param> </result> </action> </package> </struts>

值得注意的是,定義的攔截器棧名和interceptor-stack的name必須保持一致。

注意:

<default-interceptor-ref name="publicLoginStack"/>

這段程式碼的作用是在整個package中的所有action,不管有沒有寫呼叫攔截器的這段程式碼:

<interceptor-ref name="publicLoginStack" />

都會預設呼叫攔截器,所以當有多個action時,需要手動新增上面這句程式碼,並且刪除掉

<default-interceptor-ref name="publicLoginStack"/>

配置好了後,我們需要寫一個interceptor類,來處理使用者訪問的請求(允許訪問還是不允許等),這個類即上面<interceptor>的 class屬性中的LoginInterceptor.java:

com.arche.alderman.Interceptor;

com.arche.alderman.constant.RequestInteractionString;
com.arche.alderman.constant.ServerCommonString;
com.arche.alderman.mvc.pub.vo.UserLoginInfo;
com.opensymphony.xwork2.ActionInvocation;
;
java.util.Map;

LoginInterceptor {
    String intercept(ActionInvocation actionInvocation) Exception {

        String name = actionInvocation.getInvocationContext().getName();
        (name.equals()) {
            actionInvocation.invoke();
        } {
            Map session = actionInvocation.getInvocationContext().getSession();
            (== session || session.isEmpty()) {
                ServerCommonString.;
            } {
                UserLoginInfo userLoginInfo = (UserLoginInfo) session.get(RequestInteractionString.);
                (== userLoginInfo){
                    ServerCommonString.;
                }{
                    (!= userLoginInfo.getUserId() || != userLoginInfo.getUserName() || != userLoginInfo.getUserType()) {
                        actionInvocation.invoke();
                    } {
                        ServerCommonString.;
                    }
                }

            }
        }
    }
}

需要特別注意的是,這個類要繼承AbstractInterceptor類,然後重寫interceptor()方法。

大概就是這些,挺簡單的!