前言:比如有這樣一個場景,當使用者未登入時,點選釋出項目、投資項目就需要提示使用者進行登入,進而彈出登入頁面,當使用者登入完成後,就可以操作對應的頁面。那麼這種情況,就需要進行權限的攔截,那麼使用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
注意:
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();
}
}
}