请教,我在系统中添加了一个全局拦截器,然后再这个全局拦截器里面再添加一个拦截器会一直循环代码报错,请问谁可以帮帮忙解答一下什么原因。
我在全局拦截里面添加一个操作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)
首先,异常信息并没有贴全,所以无法判断具体是什么错误,只知道是cglib在调用时出错误。其次jfinal已经提供了业务层AOP,不建议直接接触cglib再生成代理,直接使用Enhance.enhance(target)省事很多,而且应该也不会出现错误。感谢解答,没有贴出异常信息是因为他一直循环嵌套输出日志,顶掉了。后面不知道怎么回事我改了很多地方,莫名其妙又可以两次回调了。谢谢堆栈信息看不出啥,异常提示信息有吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。