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

时间:2015-03-11 22:19:59

标签: spring spring-data-jpa tuckey-urlrewrite-filter

我正在使用Tuckey UrlRewriteFilter。我想使用数据库中的重写规则,因此使用<class-rule class="com.example.Foo" />配置,它允许您在运行时获取规则。我创建了一个扩展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类中使用Spring Data JPA Repository,但看起来存储库是null。

如何正确注射?

1 个答案:

答案 0 :(得分:2)

照常在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>

最后,在您的ROOT应用程序上下文中,声明一个bean指向您的过滤器类,并且与从web.xml加载的应用程序上下文文件中的web.xml中提供的过滤器名称相同:

<bean id="urlRewriteFilter" class="org.tuckey.web.filters.urlrewrite.UrlRewriteFilter"/>

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