实现SpringBoot拦截器【简】


有时候项目里面会出现以下漏洞页面,我们可以使用拦截器去做一个简单的拦截避免这种情况发生

访问白页问题

一、创建拦截器 实现HandlerInterceptor接口

我这边只拦截4xx和5xx的状态,你们自己随意修改postHandle里面的内容

package com.yami.shop.interceptor;

import com.alibaba.fastjson.JSONObject;
import com.yami.shop.common.exception.YamiShopBindException;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class CustomHandlerInterceptor implements HandlerInterceptor {
    
    

    /**
     * 访问控制器方法前执行
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
    
    
        return true;
    }

    /**
     * 拦截4xx和5xx的状态 返回Json格式的 错误代码和信息 到页面
     * 访问控制器方法后执行
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                           ModelAndView modelAndView) throws Exception {
    
    
        System.out.println(new Date() + "--postHandle:" + request.getRequestURL());
        if (!"".equals(response.getStatus()+"") && modelAndView != null) {
    
    // 防止出现空指针

            // 拦截4xx和5xx的状态
            if(response.getStatus()>=400 && response.getStatus()<600) {
    
    
                String jsonInfo = "{code:"+response.getStatus()+",msg:'访问页面错误'}";
                // 返回Json格式的 错误代码和信息 到页面
                // 我这边是自己项目的抛异常方法,你们可以自己发挥。
                throw new YamiShopBindException(JSONObject.parseObject(jsonInfo).toJSONString());
                
                // modelAndView.setViewName("/err"); 这个是跳转到/err的接口,我没有实现所以注释掉
            }
        }
    }

    /**
     * postHandle方法执行完成后执行,一般用于释放资源
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
    
    
    }


}

HandlerInterceptor 接口中定义以下 3 个方法:在这里插入图片描述

二、配置拦截器


/**
 * 拦截器装配
 */
@Configuration
public class OpenApiFilterConfig implements WebMvcConfigurer {
    
     //找到你项目中实现WebMvcConfigurer 这个接口的配置类 配置拦截器

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    
    
        registry.addInterceptor(new CustomHandlerInterceptor())
                .addPathPatterns("/**");
    }
}

addPathPatterns:该方法用于指定拦截路径,例如拦截路径为"/**",表示拦截所有请求,包括对静态资源的请求。
excludePathPatterns:该方法用于排除拦截路径,即指定不需要被拦截器拦截的请求。(但是我尝试没有效果所以上面没用)用法:在后面再.excludePathPatterns("/", "/login", "/index")

三、效果图

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43825761/article/details/128485046