2013-02-08 18 views
9

Próbuję wykonać wstrzyknięcie sprężyny do filtra serwletu. Filtr jest oprócz przywoływanych plików jar. więc. Nie mogę zmienić tego jako przechwytywacza. W web.xml mojego projektu wtyczkiWstrzyknięcie sprężyny w filtrze servletu

<filter> 
    <filter-name>CustomFilter</filter-name>  
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>  
    <init-param>  
     <param-name>someinitparam</param-name>  
     <param-value>value to it</param-value>  
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>CustomFilter</filter-name> 
    <url-pattern>/mywebservices/*</url-pattern> 
</filter-mapping> 

W spring.xml użyję jak ten

<bean id="CustomFilter" class="com.abc.CustomFilter"></bean> 

Istnieją pewne filtry są już skonfigurowane w spring.xml jak

<bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy"> 
    <property name="filterInvocationDefinitionSource"> 
     <value> 
      CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON 
      PATTERN_TYPE_APACHE_ANT 
      /mywebservices/*=some existing filters 
     </value>    
    </property> 
</bean> 

Jak już określiłem wzorzec adresu URL w web.xml, muszę dodać ponownie w filterChainProxy jako

/mywebservices/**=CustomFilter, some existing filters 

Czy to zadziała.

Proszę sugerować.

+0

to będzie działać ?? czy próbowałeś? – TheWhiteRabbit

+0

Hmm .. brzmi trudno. Wstrzyknięcie zależności sprężynowych zwykle wykonuje się na ziarnie utworzonym w kontekście sprężyny - podczas gdy filtry są tworzone przez sam serwer Java. Może to, co możesz zrobić, to - jeśli możesz być pewien, że kontekst wiosenny jest gotowy do czasu utworzenia klasy Filtra - spróbuj jakoś odwołać się do niej. Przy okazji, powiedz nam więcej o swojej aplikacji - nie używasz Spring MVC? Jeśli tak, być może nie trzeba używać filtra serwletu – gerrytan

+0

@ Technika wymiany. Próbowałem tego, ale powoduje to poważny błąd w mojej aplikacji. – Patan

Odpowiedz

0

Myślę, że nie można wstrzykiwać fasoli poza kontekstem sprężyny, a filtr serwletu znajduje się poza kontekstem sprężyny. Jeśli chcesz filtr wewnątrz kontekstu, polecam przejść do interkonektorów wiosennych. Te przechwytywacze znajdują się w kontekście sprężyn i można wykorzystać możliwości kontenera sprężynowego za pomocą tych przechwytujących.

+1

Spring Security używa wielu filtrów zdefiniowanych w kontekście aplikacji Spring. Właśnie do tego służy funkcja "DelegatingFilterProxy". –

+0

Ta odpowiedź jest po prostu nieprawidłowa. –

14

Można skonfigurować filtr jak ty w web.xml

<filter> 
    <filter-name>CustomFilter</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>CustomFilter</filter-name> 
    <url-pattern>/mywebservices/*</url-pattern> 
</filter-mapping> 

a następnie zastosować właściwości w spring.xml

<bean id="CustomFilter" class="com.abc.CustomFilter"> 
    <property name="someParameter"> 
     <value>some value</value> 
    </property> 
</bean> 
+0

Dziękuję za odpowiedź. Czy możemy zarejestrować w tym parametrze filtr serwletu jako właściwość elementu , czy też musimy go podać w elemencie w pliku web.xml. – Patan

+0

A także jak już określiłem wzorzec URL w web.xml jako /mywebservices/*. Czy muszę dodać go ponownie jako wartość do/myservice/** w komponencie bean z identyfikatorem filterChainProxy. Proszę pomóc – Patan

+0

FilterChainProxy jest opcjonalna i służy do drobnoziarnistej kontroli nad tym, które filtry są wykonywane. Zwykle nie ma potrzeby definiowania go jawnie. Jeśli jest z innego powodu, nie robisz nic złego, jeśli dodasz tam także swój filtr. – ckoidl

Powiązane problemy