开发者社区> 问答> 正文

jfinal框架使用拦截器问题?报错

请教,我在系统中添加了一个全局拦截器,然后再这个全局拦截器里面再添加一个拦截器会一直循环代码报错,请问谁可以帮帮忙解答一下什么原因。

我在全局拦截里面添加一个操作hook,当在全局拦截中执行这个操作的时候会触发另一个拦截器。这时候代码会一直在另一个拦截器里面循环迭代。不知道怎么回事。

代码:

1.在项目启动配置中添加全局路径拦截器:


public void configInterceptor(Interceptors me) {
        AuthManagerInterceptor authManager = new AuthManagerInterceptor();
        me.add(authManager);
    }



2.在常量配置创建另一个拦截器


FinalProxy finalProxy = new FinalProxy();
Constant.hw = (InjectManager) finalProxy.createProxy(InjectManager.class,"PageInject_Before","injectCommonVariable");

FinalProxy继承 net.sf.cglib.proxy.MethodInterceptor类

在intercept方法

result = methodProxy.invokeSuper(proxy, params);    doBefore(); return result;

doBefore方法

Method method = one.getMethod(StrKit.firstCharToLowerCase(one.getSimpleName()) + hookName, null);
Object object = com.jfinal.aop.Enhancer.enhance(one);
method.invoke(object);

然后运行项目报错


at org.yoqu.cms.core.util.FinalProxy.intercept(FinalProxy.java:116)
	at org.yoqu.cms.core.admin.config.InjectManager$$EnhancerByCGLIB$$b706893c.injectPersonalVariable(<generated>)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:483)
	at org.yoqu.cms.core.util.FinalProxy.intercept(FinalProxy.java:116)
	at org.yoqu.cms.core.admin.config.InjectManager$$EnhancerByCGLIB$$b706893c.injectPersonalVariable(<generated>)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:483)
	at org.yoqu.cms.core.util.FinalProxy.intercept(FinalProxy.java:116)
	at org.yoqu.cms.core.admin.config.InjectManager$$EnhancerByCGLIB$$b706893c.injectPersonalVariable(<generated>)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:483)
	at org.yoqu.cms.core.util.FinalProxy.intercept(FinalProxy.java:116)





展开
收起
爱吃鱼的程序员 2020-06-09 15:39:56 631 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

      首先,异常信息并没有贴全,所以无法判断具体是什么错误,只知道是cglib在调用时出错误。其次jfinal已经提供了业务层AOP,不建议直接接触cglib再生成代理,直接使用Enhance.enhance(target)省事很多,而且应该也不会出现错误。感谢解答,没有贴出异常信息是因为他一直循环嵌套输出日志,顶掉了。后面不知道怎么回事我改了很多地方,莫名其妙又可以两次回调了。谢谢堆栈信息看不出啥,异常提示信息有吗?

    2020-06-09 15:40:12
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring框架入门 立即下载
Java Spring Boot开发实战系列课程【第7讲】:Spring Boot 2.0安全机制与MVC身份验证实战(Java面试题) 立即下载
Java Spring Boot开发实战系列课程【第15讲】:Spring Boot 2.0 API与Spring REST Docs实战 立即下载