19.拦截器

配置拦截器需要实现两步
1.配置自己的拦截器,实现HandlerInterceptor接口,重写里面的三个方法,注意方法的执行时机
        @Slf4j
        public class LoginInterceptor implements HandlerInterceptor {
            //重点1:目标方法执行前执行
            @Override
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
                HttpSession session = request.getSession();
                if(session.getAttribute("loginUser")==null){
                    log.info("用户没有登录,转发到登录!");
                    session.setAttribute("msg", "请先登录!");
                    request.getRequestDispatcher("/").forward(request, response);
                    //重点4:false为拦截
                    return false;
                }
                //重点5:true为放行
                return true;
            }
            //重点2:目标方法执行完成后执行
            @Override
            public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
                log.info("目标方法执行完毕,返回给页面的值{}",modelAndView);
            }
            //重点3:页面渲染完成后执行
            @Override
            public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
                log.info("页面渲染完毕,执行异常{}",ex);
            }
        }

2.在定制化webmvc中添加自己的拦截器
        /**
         * 1.编写一个拦截器实现HandlerInterceptor接口
         * 2.拦截器注册到容器中(在webmvcconfigurer的addInterceptors)
         * 3.指定拦截规则【如果是拦截所有,静态资源也会拦截】
         */
         //重点1:自定义的springboot配置类
        @Configuration
        public class MyWebConfig {
            //添加自定义的WebMvcConfigurer组件,并重写addInterceptor方法(添加拦截器!)
            @Bean
            public WebMvcConfigurer getWebMvcConfiguration(){
                return new WebMvcConfigurer() {
                    @Override
                    public void addInterceptors(InterceptorRegistry registry) {
                        registry.addInterceptor(new LoginInterceptor())//添加自定义的拦截器
                                .addPathPatterns("/**")//拦截所有请求,包括了静态资源
                                .excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**");//排除不拦截的请求,这里包括了登录页面请求和静态资源请求
                    }
                };
            }
        }
拦截器执行原理:

posted @   努力的达子  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示