【本人秃顶程序员】SpringBoot从零单排——拦截器的使用

←←←←←←←←←←←← 快!点关注java

在项目开发中咱们经常须要对请求进行验证,如登陆校验、权限验证、防止重复提交等等,经过拦截器来过滤请求。自定义一个拦截器须要实现HandlerInterceptor接口。程序员

代码以下:web

import org.springframework.web.servlet.HandlerInterceptor;  
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;

  
/**  
 \* 自定义拦截器,如身份验证、权限控制、登陆拦截等、  
 \* 一、实现HandlerInterceptor  
 \* 二、实现Spring的WebRequestInterceptor  
 */  
public class HttpInterceptor implements HandlerInterceptor {  
    /**  
     \* 请求执行以前进行调用,对请求进行预处理,  
     \* 返回true以后可继续往下执行调用下一个Interceptor。或者Controller  
     \* ,返回false终止请求  
     */  
    @Override  
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {  
        System.out.println("请求前拦截");  
        return true;  
    }

    /**  
     \* 执行完Controller以后 && DispatcherServlet进行视图渲染以前执行  
     */  
    @Override  
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {  
        System.out.println("请求完成后的操做...");  
    }

    /**  
     \* DispatcherServlet渲染以后取执行。能够用于资源清理等工做  
     */  
    @Override  
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {  
        System.out.println("视图渲染以后...");  
    }  
}

此时咱们还须要建立一个类来实现WebMvcConfigurer,并重写addInterceptors方法。将前面定义的拦截器添加到InterceptorRegistry中。
除此以外咱们还能够继承WebMvcConfigurerAdapter 或者继承WebMvcConfigurationSupport。可是WebMvcConfigurerAdapter在2.0版本被标记了@Deprecated,意味着在将来版本中可能会取消。代码以下spring

/**  
 \* WebMvcConfigurerAdapter 自定义拦截器集成WebMvcConfigurerAdapter,SpringBoot 2.0 后,该类被标记为@Deprecated.后的版本中会被取消  
 \* 解决办法  
 \* 一、实现WebMvcConfigurer (推荐)  
 \* 二、继承WebMvcConfigurationSupport  
 */  
// 该注解表示将类交给spring进行管理  
@Configuration  
public class WebAppConfig implements WebMvcConfigurer {

    @Override  
    public void addInterceptors(InterceptorRegistry registry) {  
        /**  
         \* 能够添加多个拦截器  
         */  
        registry.addInterceptor(new HttpInterceptor()).addPathPatterns("/**");  
        /**  
         \* 也能够添加多个拦截器  
         \* registry.addInterceptor(new HttpInterceptor1());  
         */  
    }  
}

添加一个Controllerapp

 /**  
     \* RequestMapping 将Http请求映射到方法上  
     */  
    @RequestMapping("/")  
    public String HelloWorld() {  
        System.out.println("Http请求已发出");  
        return "Hello World";  
    }

启动项目,访问localhost:8080.观察控制台,发现以下所示ide

2019-01-06 00:32:32.168  INFO 69288 --- \[nio-8080-exec-1\] o.a.c.c.C.\[Tomcat\].\[localhost\].\[/\]       : Initializing Spring DispatcherServlet 'dispatcherServlet'  
2019-01-06 00:32:32.168  INFO 69288 --- \[nio-8080-exec-1\] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'  
2019-01-06 00:32:32.173  INFO 69288 --- \[nio-8080-exec-1\] o.s.web.servlet.DispatcherServlet        : Completed initialization in 5 ms  
请求前拦截  
Http请求已发出  
请求完成后的操做...  
视图渲染以后...

意味着咱们自定义的拦截器成功生效了。post

## 写在最后:
秃顶程序员的不易,看到这里,点了关注吧!
点关注,不迷路,持续更新!!!
spa

相关文章
相关标签/搜索