展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

拦截器

  • 拦截器实现步骤:
1、编写一个拦截器实现HandlerInterceptor接口

2、拦截器注册到容器中(实现WebMvcConfigurer的addInterceptors)

3、指定拦截规则,如果是拦截所有,静态资源也会被拦截
  • 编写一个拦截器
public class LoginInterceptor implements HandlerInterceptor {

    // 请求方法调用之前执行的方法
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // session中是否存在用户数据,有则放行
        HttpSession session = request.getSession();
        Object loginUser = session.getAttribute("loginUser");
        if(loginUser != null){
            //放行
            return true;
        }
        // 不存在则拦截,跳转到登录页面,同时转发请求域中是msg
        request.setAttribute("msg","请先登录");
        request.getRequestDispatcher("/").forward(request,response);
        return false;
    }

   // 请求方法调用之后,视图渲染前执行的方法
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // log.info("postHandle执行{}",modelAndView);
    }
    
   // 请求方法执行完成后执行的方法
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // log.info("afterCompletion执行异常{}",ex);
    }

}
  • 注册到容器,配置类实现WebMvcConfigurer
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/**")    // 拦截所有请求,包括静态资源
                .excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**");    //   放行的请求,包括一些静态资源
    }

}
posted @ 2022-07-30 16:29  DogLeftover  阅读(22)  评论(0编辑  收藏  举报