jfinal拦截器Interceptor解析

前言:比如有这样一个场景,当用户未登录时,点击发布项目、投资项目就需要提示用户进行登录,进而弹出登录页面,当用户登录完成后,就可以操作对应的页面。那么这种情况,就需要进行权限的拦截,那么使用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();
        }
    }
}

这样就实现了页面之间的拦截跳转。

结语:文章内容只介绍了本篇相关的方法,你需要参照系列文章进行研究。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉默王二

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值