我正在處理一個用例,其中有一個專案包含 servlet-filter 作為中間件。為了運行這個過濾器,我@Component使用了 servlet-filter 類。在我的另一個應用程式中,我放置了包含此過濾器的包,如下所示。
專案 A(充當中間件)
package com.filter_demo;
.
.
.
@Component
public class middleware extends HttpFilter {
@Override
public void init(FilterConfig filterConfig) {
System.out.println("Inside init of filter");
}
@Override
public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain){
System.out.println("incoming request");
filterChain.doFilter(request,response);
System.out.println("outgoing response");
}
@Override
public void destroy(){
}
}
專案 B(包含實際應用邏輯、控制器等)
package com.demoApp;
.
.
.
@SpringBootApplication(scanBasePackages = {"com.demoApp","com.filter_demo"})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
注意:如果我沒有將 @Component 放在過濾器類上,那么 http 請求就不會到達這個過濾器。
如何在不添加 @Component 的情況下使用此過濾器,基本上使其獨立于 spring,以便我可以在使用 servlet、jsp 等的 core-java 非 springboot 應用程式中使用此過濾器。
而且我不想在專案 B(我的應用程式)中進行重大更改來注冊該過濾器。
uj5u.com熱心網友回復:
要替換@Component“中間件”/過濾器中的注釋,這就足夠/等效了:
@SpringBootApplication(scanBasePackages = {"com.demoApp","com.filter_demo"})// or any "visible configuration"
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean // !
public middleware middleware(/*...*/) {
return new middleware(/*...*/);
}
}
...要使過濾器“獨立于彈簧”,您還應該確保它不使用其他[import] org.springfr...*.
在您的目標(非彈簧)例如 web.xml 應用程式中,您可以像這樣配置它:
<filter>
<filter-name>myMiddleware</filter-name>
<filter-class>com.filter_demo.middleware</filter-class>
<!-- init-param>
<param-name>foo</param-name>
<param-value>bar</param-value>
</init-param-->
</filter>
<filter-mapping>
<filter-name>myMiddleware</filter-name>
<url-pattern>/foo/bar/*</url-pattern>
</filter-mapping>
</filter>
uj5u.com熱心網友回復:
您需要在專案 B 中進行的最小更改是手動顯式定義此過濾器,@Import而不是依賴使用組件掃描來查找基于以下內容的 spring bean @Component:
@SpringBootApplication(scanBasePackages = {"com.demoApp","com.filter_demo"})
@Import({middleware.class})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/511700.html
