springboot中,不存在的url会不会被Interceptor拦截?

休坡本
  • 58

我这边两个项目,都是springboot的.版本都是2.1.3.RELEASE
开发工具都是idea 2017.3,构建工具都是gradle 4.6

  1. A项目只提供接口,项目中没有页面.

clipboard.png

返回一个不存在的url. 比如 /mng/abc
请求会走拦截器

clipboard.png
走到验证token的地方会抛出异常. 但是这个抛出的异常无法在同一异常拦截处理器中被拦截到.(但是一个正确的url地址会被拦截到)

下图是访问一个不存在的url地址

clipboard.png

下图是访问一个存在的url地址

clipboard.png

  1. B项目有提供页面,拦截器也是相同的配置. 访问一个不存在的url地址就直接返回404. 不会走拦截器.访问存在的地址就会走拦截器.

下图访问一个不存在的地址

clipboard.png

下图是访问一个存在的地址

clipboard.png

那么springboot中, 一个不存在的url到底什么情况下会走拦截器,什么情况不会走拦截器?
还有项目A中的情况, 一个不存在的url走拦截后,抛出了一个自定义异常, 要如何才能捕获?

回复
阅读 4.6k
2 个回答

springboot默认有个BasicErrorController继承AbstractErrorController实现全局的异常处理。
BasicErrorController 如果不存在的页面会跳转到error的视图中,可以在项目中新建当前视图例如error.html

会执行啊,只要你输入的url符合你定义的拦截器的拦截规则,比如拦截器要拦截user/info/,你输入user/info/aa,就会被拦截;
具体流程是:

  1. 先执行dispatcherServletdoDispatch()方法
  2. 找到对应的mappedHandler
  3. 根据请求,去调用拦截器interceptor
  4. 拦截器通过执行handlerAdapter处理请求,没有对应的view时返回404
  5. 没通过拦截器校验则直接error
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏