1. 程式人生 > >Spring Boot 攔截器建立和註冊

Spring Boot 攔截器建立和註冊

一、攔截器

```

public class MyInterceptorimplements HandlerInterceptor {

private Loggerlogger = LoggerFactory.getLogger ( MyInterceptor.class );

    private NamedThreadLocalstartTimeThreadLocal =new NamedThreadLocal("StopWatch-StartTime");

    @Override

    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o)throws Exception {

//對option請求的處理

        httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");

        httpServletResponse.setHeader("Access-Control-Allow-Methods", "*");

        httpServletResponse.setHeader("Access-Control-Max-Age", "3600");

        httpServletResponse.setHeader("Access-Control-Allow-Headers",

                "Origin, X-Requested-With, Content-Type, Accept");

        // 列印請求日誌

//開始時間

        long beginTime = System.currentTimeMillis();

        startTimeThreadLocal.set(beginTime);

        logger.info ("URL : " + httpServletRequest.getRequestURL ().toString () );

        logger.info ("請求方式 : " + httpServletRequest.getMethod () );

        logger.info ("IP : " + httpServletRequest.getRemoteAddr () );

//        HandlerMethod handlerMethod = (HandlerMethod)o;

//        logger.info ( "請求的介面方法 : " + handlerMethod.getMethod());

//        Enumeration enumAttr = httpServletRequest.getParameterNames ();

//        StringBuilder sb = new StringBuilder ();

//        while (enumAttr.hasMoreElements ()) {

//            String attr = enumAttr.nextElement ().toString ();

//            sb.append (attr+":"+ httpServletRequest.getParameter ( attr ) ).append ( ", " );

//        }

//        logger.info("請求引數:{}",sb);

//        logger.info ( "Cookies: " + httpServletRequest.getCookies ());

//引數

        Enumeration enums = httpServletRequest.getParameterNames ();

        while (enums.hasMoreElements ()) {

String paraName = enums.nextElement ();

            logger.info ( paraName +":" + httpServletRequest.getParameter ( paraName ) );

        }

return true;

    }

@Override

    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView)throws Exception {

}

@Override

    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e)throws Exception {

long endTime = System.currentTimeMillis();

        long beginTime =startTimeThreadLocal.get();

        long consumeTime = endTime - beginTime;

        logger.info("請求時間:{}ms",consumeTime);

    }

```

二、註冊

```

@Configuration

public class MyControllerAdviceextends WebMvcConfigurerAdapter {

@Bean  //攔截器注入為bean

    public HandlerInterceptorgetMyInterceptor(){

return new MyInterceptor();

    }

@Bean  //攔截器注入為bean

    public HandlerInterceptorgetOperateLogInterceptor(){

return new OperateLogInterceptor();

    }

@Override

    public void addInterceptors(InterceptorRegistry registry) {

//註冊攔截器1

        registry.addInterceptor(getMyInterceptor()).addPathPatterns("/**");

        //註冊攔截器2

        registry.addInterceptor(getOperateLogInterceptor()).addPathPatterns("/**");

        super.addInterceptors(registry);

    }

}

```