環(huán)境說(shuō)明
- spring boot 1.5.9
- jdk8
問(wèn)題概述
在spring boot中使用Filter和HandlerIntercepter中對(duì)于相同路徑匹配寫(xiě)法有差別,如路徑/api/v1/service1
,在Filter中可以使用/api/*
,但在HandlerIntercepter注冊(cè)時(shí)需要寫(xiě)成/api/**
,以下為相關(guān)具體說(shuō)明
1. Filter
在spring boot中自定義Filter(該Filter繼承自org.springframework.web.filter.OncePerRequestFilter
)在注冊(cè)匹配路徑時(shí),對(duì)于/api/v1/service1
做路徑映射時(shí),需要使用/api/*
匹配
完整代碼如下:
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
//初始化自定義RequestFilter
ApiRequestFilter apiRequestFilter = new ApiRequestFilter(apiConfigService);
registrationBean.setFilter(apiRequestFilter);
List<String> urlPatterns = new ArrayList<>();
//設(shè)置映射路徑
urlPatterns.add("/api/*");
registrationBean.setUrlPatterns(urlPatterns);
return registrationBean;
}
2. HandlerInterceptor
在spring boot中自定義HandlerInterceptor(該HandlerInterceptor繼承自org.springframework.web.servlet.handler.HandlerInterceptorAdapter
)在注冊(cè)匹配路徑時(shí),對(duì)于/api/v1/service1
做路徑映射時(shí),需要使用/api/**
匹配
完整代碼如下:
@SpringBootApplication
@RestController
public class DemoApplication extends WebMvcConfigurerAdapter {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 添加攔截器
registry.addInterceptor(new ApiInterceptor()).addPathPatterns("/api/**");
}
}