我遇到了一個問題,我在 SO 上沒有看到任何地方的參考。我有一個 spring @Configuration 類,如下所示:
package com.mypackage.admin.config;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration
public class ApiFilterConfig {
@Bean
public FilterRegistrationBean<RequestFilter> filterRegistrationBean2() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean <RequestFilter> registrationBean = new FilterRegistrationBean(new CorsFilter(source));
return registrationBean;
}
@Bean
public FilterRegistrationBean<RequestFilter> filterRegistrationBean() {
FilterRegistrationBean <RequestFilter> registrationBean = new FilterRegistrationBean();
RequestFilter customURLFilter = new RequestFilter();
registrationBean.setFilter(customURLFilter);
registrationBean.addUrlPatterns("/mobile");
registrationBean.addUrlPatterns("/team");
registrationBean.addUrlPatterns("/team/delete");
registrationBean.addUrlPatterns("/user/*");
return registrationBean;
}
}
還有一個看起來像這樣的過濾器:
public class RequestFilter implements Filter {
//TODO: Needs integration test
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException {
System.out.println("hi");
}
}
這些組件似乎部分正確連接,因為 Cors 配置有效并且過濾器應用于指定的 URL 模式。但是,不會呼叫實際的 API 方法。我在該方法中列印陳述句并設定除錯點,呼叫端點時沒有任何反應。我檢查了資料庫,沒有任何內容。它就像請求在通過過濾器并列印“hi”后被丟棄。我究竟做錯了什么?如何讓過濾器處理請求并允許 API 方法呼叫繼續?
uj5u.com熱心網友回復:
你缺少重要的功能:chain.doFilter(request,response);
如果沒有上述功能,鏈條將被打破。
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException {
System.out.println("hi");
chain.doFilter(request,response);
}
https://docs.oracle.com/javaee/7/api/javax/servlet/FilterChain.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/379575.html
