ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

preHandle执行两次事发原因,权限放行失败

2022-01-27 16:03:58  阅读:184  来源: 互联网

标签:preHandle 请求 接口 PassToken 放行 error 权限 method


preHandle执行两次事发原因

事发背景

  • 肯定是只调用了一次接口但是preHandle执行两次,这是有这个问题的前提
  • 创建demo接口的时候(实验新的检验规则),用post测试,此时接口上已经加上了@PassToken去掉鉴权(为了方便测试)。当用postman进行调用的时候,发现报权限错误,此时问题来了,不是已经有@PassToken放行了吗,怎么还会验证权限?

排查问题

  • 首先恢复案发现场,还原执行两次的那个过程
  • 查看两次拦截请求preHandle的不一样的地方,如果你够细心,基本能大致发现问题,发现第二次请求request.getServletPath()获取的方法非请求方法,而是“/error”。这method肯定不是我们需要的,那么此时就可以debug去找这个method出来的原因了。
  • 这里我就不还原debug的过程了,简单说一下method中“/error”出现的原因。

原因

  • 拦截器中preHandle第一次被执行,请求method正确,@PassToken生效,第一次拦截被放过,此时去找能够处理自己的处理器,但是没有找到,于是发出了一个error的请求(error请求的配置类是ErrorMvcAutoConfiguration,具体执行在BasicErrorController中,返回了一个404页面),这个请求被拦截器拦截了,所以输出了拦截语句但是请求路径是error,而不是浏览器发出的初始请求method。

解决办法

  • 首先肯定是第二次输出的下method中“/error”是不需要走preHandle的,可以先在进入preHandle方法去过滤一下,或者放行excludePathPatterns("/error");
  • 查找一下代码接口方法中是否有什么问题导致发出了一个error的请求,这个就是很多样的原因了,这里就不罗嗦了

标签:preHandle,请求,接口,PassToken,放行,error,权限,method
来源: https://blog.csdn.net/weixin_43948758/article/details/122718935

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有