Spring Boot 配置拦截器

打印 上一主题 下一主题

主题 924|帖子 924|积分 2772


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

新建登录验证类 LoginValidationInterceptor.java:
  1. package site.exception.springbootinterceptor.interceptor;
  2. import org.springframework.lang.Nullable;
  3. import org.springframework.web.servlet.HandlerInterceptor;
  4. import org.springframework.web.servlet.ModelAndView;
  5. import site.exception.springbootinterceptor.entity.User;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. /**
  9. * @time 12:19
  10. * @discription 登录验证拦截器
  11. **/
  12. public class LoginValidationInterceptor implements HandlerInterceptor {
  13.     @Override
  14.     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  15.         System.out.println("preHandle ...");
  16.         User user = (User) request.getSession().getAttribute("user");
  17.         if (user == null) {
  18.             // 若未登录,重定向到登录页面
  19.             response.sendRedirect("login.html");
  20.             return false;
  21.         }
  22.         // 若已登录,继续往下执行
  23.         return true;
  24.     }
  25.     @Override
  26.     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
  27.         System.out.println("postHandle ...");
  28.         // controller 方法调用完毕后,执行此方法
  29.     }
  30.     @Override
  31.     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
  32.         System.out.println("afterCompletion ...");
  33.         // 页面渲染完成后调用此方法, 一般用来清除某些资源等
  34.     }
  35. }
复制代码
定义一个拦截器类后,您需要实现 HandlerInterceptor 接口,其有三个方法可以重写:

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

上面,您已经定义好一个登陆拦截的拦截器了,接下来,需要做一下全局配置。
新建 WebMvcConfig.java 配置类:
  1. package site.exception.springbootinterceptor.config;
  2. import org.springframework.context.annotation.Configuration;
  3. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
  4. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  5. import site.exception.springbootinterceptor.interceptor.LoginValidationInterceptor;
  6. /**
  7. * @time 12:17
  8. * @discription
  9. **/
  10. @Configuration
  11. public class WebMvcConfig implements WebMvcConfigurer {
  12.     /**
  13.      * 配置拦截器
  14.      * @param interceptorRegistry
  15.      */
  16.     @Override
  17.     public void addInterceptors(InterceptorRegistry interceptorRegistry) {
  18.         // 拦截所有 /admin/** 的访问地址
  19.         interceptorRegistry.addInterceptor(new LoginValidationInterceptor()).addPathPatterns("/admin/**");
  20.     }
  21. }
复制代码
到此,一个简单的拦截器就配置完成了!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

圆咕噜咕噜

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表