当前位置: 首页 > news >正文

盐城网站优化推广服务百色建设网站

盐城网站优化推广服务,百色建设网站,公司做的局域网网站怎么登陆,网站建设投标其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、BUG详情 1.1 报错信息 1.2 接口响应信息 1.3 全局异常处理器的定义 二、排查过程 三、解决方案 四、总结 前言 最近… 其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、BUG详情 1.1 报错信息 1.2 接口响应信息 1.3 全局异常处理器的定义 二、排查过程 三、解决方案 四、总结 前言 最近在开发过程中我遇到一个不易察觉的小bug。这个bug并没有直接给出报错信息使得排查问题的根源变得困难。我希望通过分享这个经验帮助大家避免重蹈覆辙以免浪费不必要的时间和精力。 为了避免类似的困境我们应当时刻保持警惕对开发过程中的每一个细节都进行严格的检查。同时利用调试工具和日志输出等功能可以帮助我们更快速地定位和解决问题。此外定期进行代码审查和测试也是非常必要的这有助于发现潜在的问题并及时解决。 一、BUG详情 1.1 报错信息 如下图所示 java.lang.reflect.UndeclaredThrowableException: null at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:780) ~[spring-aop-5.3.27.jar:5.3.27] Caused by: exception.NoAuthorityException: 无权限访问 1.2 接口响应信息 预期是抛出无权限访问异常但是没有被aop捕获被上层UndeclaredThrowableException异常捕获。 1.3 全局异常处理器的定义 如下图所示 ExceptionHandler(Exception.class)public T RT handle(Exception exception) {if (exception instanceof BindException) {// Bind错误特殊处理return R.wrap(() - {ApiValidationUtil.checkBinding(((BindException) exception).getBindingResult());return null;});}return R.errorAndLog(exception);} 二、排查过程 找到最上面一层报错发现错误在CglibAopProxy.class中。 附上源码逻辑 OverrideNullablepublic Object proceed() throws Throwable {try {return super.proceed();}catch (RuntimeException ex) {throw ex;}catch (Exception ex) {if (ReflectionUtils.declaresException(getMethod(), ex.getClass()) ||KotlinDetector.isKotlinType(getMethod().getDeclaringClass())) {// Propagate original exception if declared on the target method// (with callers expecting it). Always propagate it for Kotlin code// since checked exceptions do not have to be explicitly declared there.throw ex;}else {// Checked exception thrown in the interceptor but not declared on the// target method signature - apply an UndeclaredThrowableException,// aligned with standard JDK dynamic proxy behavior.throw new UndeclaredThrowableException(ex);}}} 从源码可以看出咱们最后抛出的异常就是UndeclaredThrowableException异常所以说if块里面的逻辑是false。 继续深挖ReflectionUtils.declaresException(getMethod(), ex.getClass())方法的逻辑。 附上declaresException方法源码 public static boolean declaresException(Method method, Class? exceptionType) {Assert.notNull(method, Method must not be null);Class?[] declaredExceptions method.getExceptionTypes();for (Class? declaredException : declaredExceptions) {if (declaredException.isAssignableFrom(exceptionType)) {return true;}}return false;}method就是方法体了exceptionType就是异常类型了。 method.getExceptionTypes()从controller层读到异常类型存入declaredExceptions中与传入的exceptionType进行判断。 declaredException.isAssignableFrom(exceptionType)的意思是declaredException是不是exceptionType的父类。只要满足捕获的异常是接口抛出异常的父类就行了。 因为原来的controller层接口是并没有声明异常。 如下所示 //原先的接口Role(400)Overridepublic RUserInfoVO getUserInfo(String loginName) {Assert.notNull(loginName, 请求参数为空);return sysUserInfoService.getUserInfo(loginName);}所以declaredExceptions是空的那当然返回的是false。 所以走了else的逻辑向上抛出throw new UndeclaredThrowableException(ex)。 三、解决方案 在接口方法上声明错误类型exceptionType。 如下所示 Role(400)Overridepublic RUserInfoVO getUserInfo(String loginName) throws NoAuthorityException {Assert.notNull(loginName, 请求参数为空);return sysUserInfoService.getUserInfo(loginName);} 这样的话Class?[] declaredExceptions method.getExceptionTypes();可以读到NoAuthorityException 异常并和拦截到的异常ex.getClass()得到也是NoAuthorityException异常做对比满足isAssignableFrom方法所以成功捕获。 由此可见我们把ex.getClass()也就是AOP里要捕获的异常设置为Exception也是可以满足需求的。 附一张成功响应图 四、总结 在本次博客中我们讨论了AOP跨模块捕获异常时CGLIB拦截导致异常继续向上抛出的问题。通过分析问题原因和解决方案我们了解到CGLIB拦截异常是由于代理对象与目标对象继承关系导致的问题。通过使用AspectJ的解决方案我们可以避免该问题的发生从而更好地实现AOP功能。 通过分析CGLIB拦截异常的原因和提出解决方案我们更好地了解了AOP的实现方式和如何解决跨模块异常处理的问题。这对于在实际开发中更好地应用AOP技术具有重要的指导意义。
http://www.yutouwan.com/news/323049/

相关文章:

  • 小学微机作业做网站网站后期维护内容
  • 邢台人才网官网首页seo是什么意思如何实现
  • 网站开发 加二维扫码一个网站绑定2个域名
  • 做卫浴软管的网站seo排名赚下载
  • 松江工业区网站建设网站seo优化方法
  • 软件 网站开发合作协议mysql 注册网站
  • 公司网站怎样实名认证奥派网站建设
  • 广东蕉岭县建设局网站网站建设 江苏
  • wordpress建站购买江门众瞬网络科技有限公司
  • 多种郑州网站建设软件开发在哪能看
  • 微信订阅号做微网站wordpress登录页面打不开
  • 湘icp备 网站建设 农业 湖南wordpress文章略缩图
  • 3030wa网站开发学校找网站推广
  • 代刷网站搭建教程产品质量推广营销语
  • ps可以做网站动态图治多县网站建设公司
  • 网站开发外包维护合同appstar
  • 凡客建站网站下载梧州论坛 红豆社区
  • 网站搭建找谁电商网站建设济南建网站
  • 科技公司网站案例新人做外贸流程
  • 网站设计过程介绍汽车营销活动策划方案
  • 网站到期请续费白城网站建设
  • 班级网站制作教程怎么制作网页链接在微信上发
  • 电子商务网站建设与维护致谢词怎么写软文
  • 网站建设xiu021什么游戏不用登录直接玩
  • 毕业设计(论文)-潮州美食网网站建设.doc 免费下载企业网页申请制作步骤
  • 网站开发做什么简单wordpress 扁擔
  • 购物商城网站制作cms 免费
  • 做境外域名网站如何找外链资源
  • 建设银行注册网站的用户名怎么写高端网站建设合同
  • 做调查问卷用的网站或软件.net如何做网站