SpringBoot實現Interceptor攔截器打印請求信息

SpringBoot實現Interceptor攔截器打印請求信息

配置類

實現WebMvcConfigurer 中的addInterceptors接口,註冊Interceptor攔截器。這裏靜態資源要把項目中用到的全部類型釋放,不然加載頁面會出現錯誤的

package com.example.demo.Interceptor;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //註冊Interceptor攔截器
        InterceptorRegistration registration = registry.addInterceptor(new Interceptor());
        //攔截div接口。(/**表示攔截所有請求)
        registration.addPathPatterns(
                "/div"
        );
        //添加不攔截路徑
        registration.excludePathPatterns(
                "/**/login",            //登錄
                "/**/*.html",            //html靜態資源
                "/**/*.js",              //js靜態資源
                "/**/*.css",             //css靜態資源
                "/**/*.woff",
                "/**/*.ttf",
                "/**/*.jpg",
                "/**/*.png",
                "/**/*.gif",
                "/**/*.ico",
                "/**/*.eot",
                "/**/*.svg"
        );
    }
}

攔截類

在攔截器中打印請求信息

package com.example.demo.Interceptor;

import cn.hutool.json.JSONObject;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Enumeration;


public class Interceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        StringBuilder sb = new StringBuilder(1000);
        String url =request.getRequestURL().toString();  
		   if(!url.contains(".css") && !url.contains(".js") && !url.contains(".png") &&  !url.contains(".jpg")) { 
			   System.out.println("*******************訪問地址:"+url+"*******************");
System.out.println("*******************客戶端請求地址和操作端口:" + request.getRemoteAddr() + ":" + request.getRemotePort() + "*******************");
		   }

        //獲取請求參數
        Enumeration em = request.getParameterNames();
        JSONObject data = new JSONObject();
        while (em.hasMoreElements()) {
            String name = (String) em.nextElement();
            String value = request.getParameter(name);
            data.put(name,value);
        }
        sb .append("-------------------------------------------------------------\n");
        HandlerMethod h = (HandlerMethod) handler;
        sb.append("Controller: ").append(h.getBean().getClass().getName()).append("\n");
        sb.append("Method    : ").append(h.getMethod().getName()).append("\n");
        sb.append("Params    : ").append(data).append("\n");
        sb.append("URI       : ").append(request.getRequestURI()).append("\n");
        sb.append("URL       : ").append(request.getRequestURL()).append("\n");
        sb .append("-------------------------------------------------------------\n");
        System.out.println(sb.toString());

        return  true;
    }
}

其中:入參:Object handler,原來爲Object args2,將args2改爲handler即可。

測試接口

攔截的就是下面這個div接口。

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class TestController {

    @GetMapping("/test")
    @ResponseBody
    public int test(int x,int y ){
        return x/y;
    }
}

控制檯打印結果

*******************訪問地址:http://192.168.x.xxx:8081/test*******************
*******************客戶端請求地址和操作端口:192.168.x.xxx:53137*******************
-------------------------------------------------------------
Controller: com.example.demo.controller.TestController
Method    : test
Params    : {"x":"10","y":"5"}
URI       : /test
URL       : http://192.168.x.xxx:8081/test
-------------------------------------------------------------

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章