如何将Spring数据JPA存储库注入Servlet过滤器?

如何将Spring数据JPA存储库注入Servlet过滤器?,spring,spring-data-jpa,tuckey-urlrewrite-filter,Spring,Spring Data Jpa,Tuckey Urlrewrite Filter,我在用电话。我想使用数据库中的重写规则,因此使用配置,它允许您在运行时获取规则。我创建了一个扩展重写规则的类: public class Foo extends RewriteRule { @Autowired private MyRepository myRepository; public boolean init(ServletContext servletContext) { return true; } @Override public Rewr

我在用电话。我想使用数据库中的重写规则,因此使用
配置,它允许您在运行时获取规则。我创建了一个扩展重写规则的类:

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类中使用Spring数据JPA存储库,但该存储库看起来是空的


如何正确地插入它?

像往常一样在
web.xml
中声明过滤器,只是需要提供
org.springframework.web.filter.DelegatingFilterProxy
作为过滤器类名,而不是实际的类名

<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>

由于您的过滤器实例现在由Spring管理,您可以将任何Spring管理的bean注入其中。

谢谢@manish。我在UrlRewriteFilter.class.getResourceAsStream(“build.number.properties”)的UrlRewriteFilter.getFullVersionString()静态方法中得到一个NullPointerException;这与你原来的问题无关。对于使用getResourceAsStream的
NullPointerException,您将在StackOverflow上找到大量答案。如果它们都不起作用,请打开一个单独的问题。在没有DelegatingFilterProxy的情况下,它工作正常,因此它必须与此相关。设置init param targetFilterLifecycle=true修复了它。非常感谢!
<bean id="urlRewriteFilter" class="org.tuckey.web.filters.urlrewrite.UrlRewriteFilter"/>