2015-03-11 1 views
0

Я использую Tuckey UrlRewriteFilter. Я хочу использовать правило перезаписи из базы данных, поэтому с помощью конфигурации <class-rule class="com.example.Foo" />, которая позволяет вам получать правила во время выполнения. Я создал класс, расширяющий RewriteRule:Как вставить репозиторий JPA данных Spring Data в сервлет-фильтр?

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() { 

    } 
} 

я хотел бы использовать Spring Data JPA Repository внутри этого Foo класса, но он выглядит хранилище является недействительным.

Как я могу правильно ввести его?

ответ

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, объявить фасоль, указывающей к классу фильтра и с тем же именем, что и имя фильтра, представленной в web.xml в файле контекста приложения, загруженного из web.xml:

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

Поскольку ваш экземпляр фильтра теперь управляется Spring, вы можете вставлять в него любой управляемый Spring компонент.

+0

Спасибо @manish. Я получаю исключение NullPointerException в статическом методе UrlRewriteFilter.getFullVersionString() в UrlRewriteFilter.class.getResourceAsStream ("build.number.properties"); –

+0

Это не связано с вашим оригинальным вопросом. Вы найдете много ответов на StackOverflow для 'NullPointerException с помощью getResourceAsStream'. Если ни один из них не работает, откройте отдельный вопрос. – manish

+0

он отлично работал без DelegatingFilterProxy, поэтому он должен быть связан с этим. –

 Смежные вопросы

  • Нет связанных вопросов^_^