jFinal框架之拦截器的使用

先写拦截器代码 

package com.dlcloud.oa.erp.aop;

import com.alibaba.fastjson.JSON;
import com.dlcloud.oa.common.constant.BehaviorEnum;
import com.dlcloud.oa.erp.admin.entity.AdminUser;
import com.dlcloud.oa.erp.work.entity.OperateLog;
import com.dlcloud.oa.utils.BaseUtil;
import com.dlcloud.oa.utils.BehaviorEnumlUtils;
import com.dlcloud.oa.utils.R;
import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.core.Controller;
import com.jfinal.log.Log;
import org.apache.commons.lang3.StringUtils;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class BehaviorLogInterceptor implements Interceptor {
    @Override
    public void intercept(Invocation invocation) {
        invocation.invoke();
        try {
            Controller controller = invocation.getController();
            HttpServletRequest request = controller.getRequest();

            String methodName = invocation.getMethodName();//方法名称
            String url = request.getRequestURL().toString();//请求的url
            BehaviorEnum behaviorEnum = null;//拦截协议
            if (StringUtils.isNoneBlank(url)) {
                behaviorEnum = BehaviorEnumlUtils.getBehaviorEnumByUrl(url);
            }
            if (null != behaviorEnum) {//找到拦截协议
                String addr = request.getRemoteAddr();
                String ip = request.getRemoteHost();
                int port = request.getRemotePort();
                AdminUser userInfo = BaseUtil.getUser();//用户信息
                userInfo.getUserId();//用户id
                userInfo.getRoles();//用户角色
                String paramContent = getRequestBody(invocation, controller, request);//请求参数
                OperateLog operateLog = new OperateLog();
                operateLog.setRealname(userInfo.getRealname());//用户姓名
                operateLog.setMethod(methodName);//方法名称
               // paramContent=2000<paramContent.length()?paramContent.substring(0,2000):paramContent;
                operateLog.setParamContent(paramContent);//参数内容
                operateLog.setLastLoginIp(ip);//ip
                operateLog.setRestUrl(url);//请求url
                operateLog.setNum(userInfo.getNum());//员工编号
                operateLog.setDeptId(userInfo.getDeptId());
                operateLog.setPost(userInfo.getPost());
                operateLog.setVisitTime(new Date());//访问时间
                operateLog.setUsername(userInfo.getUsername());//登录名称
                operateLog.setUserId(userInfo.getUserId());//用户id
                operateLog.setMethodMean(behaviorEnum.getBehaviorName());//行为名称
                operateLog.setBusinessType(behaviorEnum.getModuleName());//业务模块
                operateLog.setControllerType(behaviorEnum.getControllerName());//controller名称
                operateLog.setLastLoginTime(userInfo.getLastLoginTime());//最后登录时间
                operateLog.save();
            }

        } catch (Exception e) {
            invocation.getController().renderJson(R.error("服务器响应异常:" + e.getMessage()));
            Log.getLog(invocation.getController().getClass()).error("响应错误", e);
        } finally {
            BaseUtil.removeThreadLocal();
        }

    }


    private String getRequestBody(Invocation inv, Controller controller, HttpServletRequest request) {

        //Parameter[] parameters = inv.getMethod().getParameters();//不要提前使用
        String jsonData = controller.getRawData();
        Map<String, Object> paramContent = new HashMap<String, Object>();
            paramContent.put("传递参数", request.getParameterMap());
       if (StringUtils.isNoneBlank(jsonData)) {
           paramContent.put("发送参数", jsonData);
        }

        return JSON.toJSONString(paramContent);
    }
}

——————————————————————————————————

然后在配置类里面配置一下就齐活了 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值