前言:
而今兄弟们对“拦截器返回false”大体比较关怀,看官们都想要学习一些“拦截器返回false”的相关文章。那么小编同时在网上收集了一些有关“拦截器返回false””的相关文章,希望我们能喜欢,朋友们一起来了解一下吧!拦截器是在Spring Boot中的用于拦截HTTP请求的组件,可以在请求到达Controller之前或者是在请求处理完成之后执行对于请求的自定义处理逻辑,它在HTTP请求处理流程中扮演者非常重要的角色,我们可以通过拦截器实现日志记录、认证授权、请求数据统计等功能。下面我们就来详细介绍一下如何在Spring Boot中使用拦截器。
什么是拦截器?
在Spring框架中,我们可以通过HandlerInterceptor接口来定义一个拦截器,在这个接口中定义了如下的三个方法用来执行请求拦截操作。
preHandle:在请求到达控制器之前执行。postHandle:在请求处理之后、视图渲染之前执行。afterCompletion:在请求完成之后执行,通常用于资源清理等操作。
拦截器在Spring Boot中是属于一种拦截器型的处理器,是面向Handler的处理,所以可以对Controller层的请求进行拦截。
实现拦截器
创建拦截器类
首先我们需要继承HandlerInterceptor接口来实现一个拦截器类,通过重写这个接口中的三个方法来实现对于请求逻辑的不同处理,如下所示。
@Componentpublic class MyInterceptor implements HandlerInterceptor { // 在Controller方法调用之前执行 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("Pre Handle method is Calling"); // 返回true放行,返回false中止请求 return true; } // 在Controller方法调用之后执行 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("Post Handle method is Calling"); } // 在请求完成后调用,即视图渲染完成后 @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) throws Exception { System.out.println("Request and Response is completed"); }}
preHandle()方法
该方法在请求到达Controller之前调用,我们可以在这个方法中来进行用户是否登录、是否授权等操作的处理,这个方法返回true就表示放行请求,而返回false则表示需要拦截该请求。
postHandle()方法
这个方法用于在Controller请求之后进行处理,通常在视图操作渲染之前执行,也就是说可以对ModelAndView进行操作处理。
afterCompletion()方法
该方法在请求完成后执行,通常用于进行资源清理等操作。
配置拦截器
在创建好拦截器类之后,想要使用拦截器,就需要在Spring Boot应用中注册拦截器。一般情况下,我们可以创建一个实现WebMvcConfigurer接口的配置类来完成拦截器的配置,如下所示。
@Configurationpublic class WebConfig implements WebMvcConfigurer { @Autowired private MyInterceptor myInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { // 注册自定义拦截器并指定拦截路径 registry.addInterceptor(myInterceptor) .addPathPatterns("/**") // 拦截所有请求 .excludePathPatterns("/login", "/register"); // 排除登录和注册路径 }}
这样,我们的MyInterceptor拦截器就会生效,除了/login和/register路径请求之外,会拦截所有的其他请求处理。
注意事项
拦截器执行顺序
在遇到多个拦截器的时候,这些拦截器是按照一定的顺序来进行操作的,如果需要调整这些拦截器的执行顺序可以通过调整addInterceptor的顺序来实现。
HandlerInterceptor和Filter的区别
虽然Filter和HandlerInterceptor都可以用于请求拦截,但Filter是Servlet层面的拦截,更底层。而HandlerInterceptor则是Spring MVC层面的,专门拦截Controller相关的请求。
链式拦截器
在SpringBoot中拦截器会形成一个链式调用结构,也就是说只有当前一个拦截器preHandle方法返回true才会继续执行下一个拦截器操作。
总结
在Spring Boot中拦截器是一个非常实用的操作,它可以帮助我们在不修改Controller代码的情况下对请求进行一些通用的操作,通过自定义的拦截器我们还可以完成一些自定义的扩展功能,例如对于请求日志的记录,对于用户权限的验证、对于用户调用信息的采集等等操作。
在实际开发中,我们可以根据具体的需求来组合拦截器和过滤器,这样我们可以灵活的实现多种的请求拦截功能。
标签: #拦截器返回false