拦截器

package com.crfsdi.openapi.aggregation.config;

import com.crfsdi.openapi.aggregation.cache.GlobalData;
import com.crfsdi.openapi.aggregation.model.CallInterfaceInfoModel;
import com.crfsdi.openapi.aggregation.model.InterfaceInfoModel;
import com.crfsdi.openapi.aggregation.service.CallInterfaceInfoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

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

@Component
@Slf4j
public class RequestInterceptor implements HandlerInterceptor {

    @Autowired
    CallInterfaceInfoService service;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 在请求处理之前的逻辑
        log.info("拦截到请求:" + request.getRequestURI());
        CallInterfaceInfoModel callModel = new CallInterfaceInfoModel();
        for (InterfaceInfoModel interfaceInfoModel : GlobalData.interfaceInfoModels) {
            if(request.getRequestURI().contains(interfaceInfoModel.getRequestModel())){
                BeanUtils.copyProperties(interfaceInfoModel,callModel);
                callModel.setId(null);
                callModel.setCreateDate(new Date());
                service.insert(callModel);
                return false;
            }
        }

        // 返回true表示继续处理请求,返回false表示中断请求处理
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 在请求处理之后的逻辑
        System.out.println("postHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 在请求完成后的逻辑
        System.out.println("postHandle");
    }
}
package com.crfsdi.openapi.aggregation.config;

import com.crfsdi.openapi.aggregation.cache.GlobalData;
import com.crfsdi.openapi.aggregation.model.InterfaceInfoModel;
import com.crfsdi.openapi.aggregation.service.InterfaceRequestCountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.core.Ordered;
import org.springframework.util.CollectionUtils;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import java.util.List;
import java.util.stream.Collectors;

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
    @Autowired
    private RequestInterceptor requestInterceptor;

    @Autowired
    InterfaceRequestCountService countService;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        /*if(CollectionUtils.isEmpty(GlobalData.interfaceInfoModels)){
            GlobalData.interfaceInfoModels.addAll(countService.getAllInterface());
        }
        List<String> urls = GlobalData.interfaceInfoModels.stream().map(InterfaceInfoModel::getInterfaceUrl).collect(Collectors.toList());
        */
        registry.addInterceptor(new RequestInterceptor()).addPathPatterns("/**").order(Ordered.HIGHEST_PRECEDENCE);
        super.addInterceptors(registry);
        //System.out.println(urls);
    }

    @Bean
    public FilterRegistrationBean<YourFilter> yourFilterRegistrationBean() {
        FilterRegistrationBean<YourFilter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new YourFilter());
        registrationBean.setOrder(1); // 设置优先级为1,值越小优先级越高
        registrationBean.addUrlPatterns("/*"); // 拦截所有路径
        return registrationBean;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容