先说一下区别。过滤器嘛,过滤,举个例子,出国游玩,那么出中国,不管你从中国去哪里,都会被过滤,是否有带违禁物品啊啥的。那么拦截器呢、落地签证,也就是具体的哪个国家,审核你是否是良民。也就是说。在tomcat容器中用户发送请求以后,是给serlet去调用接口、那么在给servlet调用方法之前,过滤器会过滤。拦截器是在servlet拿到请求之后做的限制操作。搞明白这个,基本上就ok 了。
copy了一个书面些的说法:过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。
写一下拦截器关于统一处理异常类的使用方式,也就是所有的异常,统一处理。
首先肯定定义各种自定义的异常,业务异常举例:
ServiceException extends RuntimeException implements Serializable
这样,就会很好的查bug。出哪种异常,哪里就有问题。不能继承exception,会导致食物异常。都继承runtimeexception,顾名思义,运行是异常,就都可以捕获到啦~
继承WebMvcConfigurerAdapter(web容器),使用configuration 将本类标注成配置类 使用spring bean 注入到ioc 容器中
两种方式: registry.addInterceptor(new AuthInterceptor()) // 加一个方法就拦截一个 .addPathPatterns("/dockingIcbc/billPay"); super.addInterceptors(registry); /*registry.addInterceptor(new AuthInterceptor()) // 默认拦截所有方法 .addPathPatterns("/**"). // 配置不进去拦截器的方法,多少个就可以像这样儿在后面一直添加,excludePathPatterns("/testBean/test","","",........). excludePathPatterns("/dockingIcbc/billPay/@@"); super.addInterceptors(registry);*/
异常处理
也就是 执行业务代码,比如出现验证码异常:
那么就会被捕获验证码异常。返回错误code、message。
就算代码中,有需要catch 有要做处理的,也不影响,因为你方法只要出异常,就会被捕获随后统一处理。下面删除举例
try { xxMapper.delete(); }catch (Exception e){ //事务回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); throw new ServiceException("删除失败"); } return ResultGenerator.genSuccessResultSms("删除成功!");
这样就完成了。也可以在拦截器中 implements HandlerInterceptor 登录拦截举例 (也就是在每次调用接口之前判断用户是否登录,token 是否有权限访问接口)