Tôi có đơn đăng ký spring-boot
.Làm thế nào để autowire đậu trong các bộ lọc servlet trong ứng dụng mùa xuân?
Tôi không có ApplicationContext.xml
hoặc web.xml
tập tin trong dự án của tôi. Tôi thích tránh chúng và có mọi thứ được cấu hình trong mã Java.
Tôi đã đọc các bài viết sau đây về tiêm đậu trong các bộ lọc servlet.
Sau khi đọc chúng, tôi bắt đầu sử dụng DelegatingFilterProxy
.
Câu hỏi của tôi là cách autowire
đậu vào bộ lọc và tránh sử dụng các tệp xml
đặc biệt cho cấu hình DelegatingFilterProxy.
Mã snipped có sẵn từ bài thứ hai tổ chức tại github.
public class AuditHandler {
public void auditRequest(String appName, ServletRequest request) {
System.out.println(appName + ": Received request from " + request.getRemoteAddr());
}
}
public class AuditFilter implements Filter {
private final AuditHandler auditHandler;
private String appName;
public AuditFilter(AuditHandler auditHandler) {
this.auditHandler = auditHandler;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
auditHandler.auditRequest(appName, request);
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
appName = filterConfig.getInitParameter("appName");
}
public void destroy() {}
}
ApplicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="auditHandler" class="com.deadcoderising.AuditHandler">
</bean>
<bean id="auditFilter" class="com.deadcoderising.AuditFilter">
<constructor-arg ref="auditHandler"/>
</bean>
</beans>
web.xml
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
metadata-complete="true">
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext*.xml</param-value>
</context-param>
<filter>
<filter-name>auditFilter</filter-name>
<filter-class>
org.springframework.web.filter.DelegatingFilterProxy
</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>appName</param-name>
<param-value>di-example</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>auditFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
nếu tôi có một số bộ lọc được áp dụng, đơn hàng được chỉ định như thế nào? –
'FilterRegistrationBean # setOrder (int)', tôi đã cập nhật câu trả lời. – mzc
Cảm ơn, tôi sẽ kiểm tra điều này ngay bây giờ –