我正在使用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。
如何正确注射?
答案 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注入其中。