SpringBoot インターセプタの実装 [シンプル]


以下の脆弱性ページがプロジェクトに表示されることがあります。インターセプターを使用して簡単なインターセプトを行い、これを回避できます

ホワイトページにアクセスする

1. 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 つのメソッドを定義します。ここに画像の説明を挿入

2、インターセプターを構成する


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

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

addPathPatterns: このメソッドは、インターセプト パスを指定するために使用されます. たとえば、インターセプト パスは "/**" であり、これは、静的リソースの要求を含むすべての要求をインターセプトすることを意味します.
excludePathPatterns: このメソッドは、インターセプト パスを除外するために使用されます。つまり、インターセプターによってインターセプトされる必要のない要求を指定します。(でもやってみたところうまくいかなかったので上記はダメです) 使い方: あとで.excludePathPatterns("/", "/login", "/index").

3. レンダリング

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_43825761/article/details/128485046