天天看點

jfinal攔截器Interceptor解析

版權聲明:歡迎轉載,請注明沉默王二原創。 https://blog.csdn.net/qing_gee/article/details/48573657

前言:比如有這樣一個場景,當使用者未登入時,點選釋出項目、投資項目就需要提示使用者進行登入,進而彈出登入頁面,當使用者登入完成後,就可以操作對應的頁面。那麼這種情況,就需要進行權限的攔截,那麼使用Interceptor就顯得彌足珍貴了。

原理介紹

當使用者點選一個操作按鈕時,向服務端發起請求,服務端進行資訊驗證,然後傳送回前端資訊,前端收到資訊後,進行回調函數操作。

服務端

package com.hc.jf.interceptor;

import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.core.Controller;

public class DealsInterceptor implements Interceptor {

    @Override
    public void intercept(Invocation inv) {
        Controller controller = inv.getController();
        String username = controller.getSessionAttr("username");

        // 使用者如果沒有登入,那麼就跳轉到登入頁面
        if (username == null || username.equals("")) {
            controller.setAttr("statusCode", 200);
            controller.setAttr("message", "使用者未登入");

            // 使用者沒有登入,則彈出登入确認框
            controller.setAttr("show_pop_login", "show_pop_login");
            controller.renderJson();
        } else {
            inv.invoke();
        }
    }
}           

攔截器具體怎麼使用,就參照jfinal的官方幫助文檔。

前端

<a href="${ctx}/project" class="btn_publish" target="ajaxTodo" callback="ajaxDone"></a>           

注意:

1. 釋出項目的target

2. callback

服務端檢測到沒有登入時,會傳遞一個show_pop_login參數回來,用來提供給回調函數ajaxDone方法來實作彈出登入視窗

function ajaxDone(json) {
    YUNM.ajaxDone(json);
    if (json[YUNM.keys.statusCode] == YUNM.statusCode.ok || json[YUNM.keys.statusCode] == YUNM.statusCode.info) {

        // 如果傳回來了局部重新整理事件,則執行局部重新整理
        if (json.loadPage) {
            // 如果指定了後調轉頁面,進行調轉
            $("#" + json.elementId).load(common.loadPath + json.loadPage + common.viewType);
        }

        // 整體重新整理
        if (json.locationUrl) {
            location.href = json.locationUrl;
        }

        if (json.show_pop_login) {
            show_pop_login();
        }
    }
}           

這樣就實作了頁面之間的攔截跳轉。

結語:文章内容隻介紹了本篇相關的方法,你需要參照系列文章進行研究。