如何将 Spring Data JPA Repository 注入 Servlet Filter?
How to inject a Spring Data JPA Repository into a Servlet Filter?
我正在使用 Tuckey UrlRewriteFilter。我想使用数据库中的重写规则,因此使用 <class-rule class="com.example.Foo" />
配置,它可以让您在运行时获取规则。我创建了一个 class 扩展 RewriteRule:
public class Foo extends RewriteRule {
@Autowired
private MyRepository myRepository;
public boolean init(ServletContext servletContext) {
return true;
}
@Override
public RewriteMatch matches(HttpServletRequest request, HttpServletResponse response) {
//myRepository is null
return super.matches(request, response);
}
@Override
public void destroy() {
}
}
我想在这个 Foo class 中使用 Spring Data JPA 存储库,但它看起来存储库是空的。
如何正确注入?
像往常一样在 web.xml
中声明您的过滤器,除了您需要提供 org.springframework.web.filter.DelegatingFilterProxy
作为过滤器 class 名称而不是您实际的 class 名称。
<filter>
<filter-name>urlRewriteFilter</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>
</filter>
<filter-mapping>
<filter-name>urlRewriteFilter</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
最后,在您的 ROOT 应用程序上下文中,声明一个指向您的过滤器 class 的 bean,其名称与从 [= 加载的应用程序上下文文件中 web.xml
中提供的过滤器名称相同12=]:
<bean id="urlRewriteFilter" class="org.tuckey.web.filters.urlrewrite.UrlRewriteFilter"/>
由于您的过滤器实例现在由 Spring 管理,您可以将任何 Spring 托管 bean 注入其中。
我正在使用 Tuckey UrlRewriteFilter。我想使用数据库中的重写规则,因此使用 <class-rule class="com.example.Foo" />
配置,它可以让您在运行时获取规则。我创建了一个 class 扩展 RewriteRule:
public class Foo extends RewriteRule {
@Autowired
private MyRepository myRepository;
public boolean init(ServletContext servletContext) {
return true;
}
@Override
public RewriteMatch matches(HttpServletRequest request, HttpServletResponse response) {
//myRepository is null
return super.matches(request, response);
}
@Override
public void destroy() {
}
}
我想在这个 Foo class 中使用 Spring Data JPA 存储库,但它看起来存储库是空的。
如何正确注入?
像往常一样在 web.xml
中声明您的过滤器,除了您需要提供 org.springframework.web.filter.DelegatingFilterProxy
作为过滤器 class 名称而不是您实际的 class 名称。
<filter>
<filter-name>urlRewriteFilter</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>
</filter>
<filter-mapping>
<filter-name>urlRewriteFilter</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
最后,在您的 ROOT 应用程序上下文中,声明一个指向您的过滤器 class 的 bean,其名称与从 [= 加载的应用程序上下文文件中 web.xml
中提供的过滤器名称相同12=]:
<bean id="urlRewriteFilter" class="org.tuckey.web.filters.urlrewrite.UrlRewriteFilter"/>
由于您的过滤器实例现在由 Spring 管理,您可以将任何 Spring 托管 bean 注入其中。