通过拦截器,我们可以针对特定 URI 做拦截,做相关业务处理,比如检查用户是否登录,打印每个请求的处理耗时等。

一、新建一个拦截器

新建登录验证类LoginValidationInterceptor.java:

package site.exception.springbootinterceptor.interceptor;import org.springframework.lang.Nullable;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import site.exception.springbootinterceptor.entity.User;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * @time 12:19 * @discription 登录验证拦截器 **/public class LoginValidationInterceptor implements HandlerInterceptor {    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {        System.out.println("preHandle ...");        User user = (User) request.getSession().getAttribute("user");        if (user == null) {            // 若未登录,重定向到登录页面            response.sendRedirect("login.html");            return false;        }        // 若已登录,继续往下执行        return true;    }    @Override    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {        System.out.println("postHandle ...");        // controller 方法调用完毕后,执行此方法    }    @Override    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {        System.out.println("afterCompletion ...");        // 页面渲染完成后调用此方法, 一般用来清除某些资源等    }}

定义一个拦截器类后,您需要实现HandlerInterceptor接口,其有三个方法可以重写:

  • preHandle: 在调用 Controller 方法之前,执行此方法;
  • postHandle: 在调用 Controller 方法之后,页面渲染之前,执行此方法,通常您可以在此方法中将渲染的视图名称更改为其他视图名称;
  • afterCompletion: 此方法在页面渲染完毕之后被调用;

二、配置拦截器

上面,您已经定义好一个登陆拦截的拦截器了,接下来,需要做一下全局配置。

新建WebMvcConfig.java配置类:

package site.exception.springbootinterceptor.config;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import site.exception.springbootinterceptor.interceptor.LoginValidationInterceptor;/** * @time 12:17 * @discription **/@Configurationpublic class WebMvcConfig implements WebMvcConfigurer {    /**     * 配置拦截器     * @param interceptorRegistry     */    @Override    public void addInterceptors(InterceptorRegistry interceptorRegistry) {        // 拦截所有 /admin/** 的访问地址        interceptorRegistry.addInterceptor(new LoginValidationInterceptor()).addPathPatterns("/admin/**");    }}

到此,一个简单的拦截器就配置完成了!

本文来自博客园,作者:深码青年,转载请注明原文链接:https://www.cnblogs.com/shenMaQN/p/17764279.html