(八)spring-boot教程,开发个人博客:拦截器用法介绍

avatar

spring-boot项目中拦截器用法

创建拦截器

创建一个拦截器,实现接口 HandlerInterceptor,接口中有三个方法

  • preHandle() 在拦截方法执行之前执行
  • postHandle() 与拦截方法同时执行
  • afterCompletion() 在拦截方法执行之后执行

我们这里做一个用户是否登录的拦截器,拦截发布博客,修改博客,删除博客等路由,所以把拦截逻辑写在 preHandle()

@Component
public class UserFilter implements HandlerInterceptor {

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    HttpSession session = request.getSession();
    // 从session中取出user对象
    User user = (User) session.getAttribute("user");
    // 判断user是否为null,如果为null则重写向到登录页
    if (user == null) {
      response.sendRedirect("/user/login");
      return false;
    } else {
      // 如果user存在,则继续向下执行
      return true;
    }
  }
}

创建MVC配置类

创建一个配置类继承 WebMvcConfigurationSupport,配置类上都要加上 @Configuration 注解,这样spring-boot启动的时候就会知道这是一个配置类了

@Configuration
public class MvcConfig extends WebMvcConfigurationSupport {
}

WebMvcConfigurationSupport 类里有很多配置方法,其中就包含拦截器的配置方法 addInterceptors(InterceptorRegistry registry),只需要重写这个方法就可以了

@Configuration
public class MvcConfig extends WebMvcConfigurationSupport {

  @Autowired
  private UserFilter userFilter;

  @Override
  protected void addInterceptors(InterceptorRegistry registry) {
    super.addInterceptors(registry);
    registry.addInterceptor(userFilter).addPathPatterns("/post/create", "/post/save", "/post/edit", "/post/update",
        "/post/delete");
  }
}

启动项目,在没有登录的情况下,访问一下 http://localhost:8080/post/create ,会发现它自动重定向到登录页了

0 条评论

目前还没有回答,快来帮帮TA吧!

添加一条评论 请尽量发布对他人有帮助的评论

登录后可发布评论

登录 | Github登录