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;
}
}