2013-02-08 12 views
9

Ich versuche Feder Injektion zu Servlet-Filter zu tun.Der Filter ist ein Teil der referenzierten Jar-Dateien. damit. Ich kann es nicht als Interceptor ändern. In web.xml meiner Plugin-ProjektFeder Injektion in Servlet Filter

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

In spring.xml werde ich wie dieses

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

verwenden Es gibt einige Filter bereits in spring.xml konfiguriert werden als

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

Da ich bereits mein URL-Muster in web.xml angegeben habe, muss ich es erneut in filterChainProxy als

hinzufügen

Wird es funktionieren.

Bitte vorschlagen.

+0

wird es funktionieren ?? Hast du es versucht? – TheWhiteRabbit

+0

Hmm .. klingt knifflig. Die Spring-Abhängigkeitsinjektion erfolgt normalerweise über Beans, die im Spring-Kontext erstellt werden - während Filter vom Java-Server selbst erstellt werden. Vielleicht können Sie - wenn Sie sicher sein können, dass der Spring-Kontext fertig ist, wenn Ihre Filter-Klasse erstellt wird - versuchen, einen Verweis darauf zu erhalten. Übrigens können Sie uns mehr über Ihre App erzählen verwenden Sie Spring MVC? Wenn dies der Fall ist, müssen Sie den Servlet-Filter – gerrytan

+0

@TechExchange möglicherweise nicht verwenden. Ich habe das versucht, aber es verursacht schwerwiegende Fehler in meiner Anwendung. – Patan

Antwort

0

Ich denke, Sie können die Beans nicht außerhalb Spring Kontext injizieren und Ihr Servlet-Filter ist außerhalb der Feder Kontext. Wenn Sie einen Filter im Kontext haben wollen, empfehle ich Springfeder-Abfangjäger. Diese Interzeptoren befinden sich im Federkontext, und Sie können mit diesen Interzeptoren Springcontainerfähigkeiten nutzen.

+1

Spring Security verwendet viele Filter, die im Kontext der Spring-Anwendung definiert sind. Dafür ist "DelegatingFilterProxy" zuständig. –

+0

Diese Antwort ist einfach nicht korrekt –

14

können Sie den Filter konfigurieren wie Sie in Ihrem 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> 

tat und dann Objekte im spring.xml injizieren

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

Vielen Dank für die Antwort. Können wir den Parameter in-it des Servlet-Filters als Eigenschaft in das Element aufnehmen oder müssen wir ihn in in web.xml angeben. – Patan

+0

Und auch wie ich bereits das URL-Muster in web.xml als /mywebservices/* angegeben habe. Muss ich es als Wert zu/myservice/** in Bean mit der ID filterChainProxy hinzufügen. Bitte helfen Sie – Patan

+0

FilterChainProxy ist optional und wird verwendet, um fein abgestimmte Kontrolle über welche Filter ausgeführt werden. Normalerweise müssen Sie es nicht explizit definieren. Wenn es aus einem anderen Grund dort ist, machst du nichts Schlechtes, wenn du auch deinen Filter dort hinzufügst – ckoidl

Verwandte Themen