2013-02-08 30 views
9

Tôi đang cố gắng tiêm mùa xuân vào bộ lọc servlet. Bộ lọc nằm ngoài các tệp jar được tham chiếu. vì thế. Tôi không thể thay đổi nó như là kẻ đánh chặn. Trong web.xml của dự án Plugin của tôitiêm vào mùa xuân trong bộ lọc servlet

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

trong spring.xml tôi sẽ sử dụng như thế này

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

Có một số bộ lọc đã được cấu hình trong spring.xml như

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

Vì tôi đã chỉ định mẫu url của mình trong web.xml nên tôi cần thêm lại trong filterChainProxy là

/mywebservices/**=CustomFilter, some existing filters 

Nó có hoạt động không.

Vui lòng đề xuất.

+0

nó sẽ làm việc ?? bạn đã thử chưa – TheWhiteRabbit

+0

Hmm .. âm thanh khó khăn. Việc tiêm phụ thuộc mùa xuân thường được thực hiện trên các bean được tạo ra trong bối cảnh mùa xuân - trong khi các bộ lọc được tạo ra bởi chính máy chủ java ee. Có lẽ những gì bạn có thể làm là - nếu bạn có thể chắc chắn bối cảnh mùa xuân đã sẵn sàng vào thời điểm lớp Lọc của bạn được tạo - hãy thử lấy một tham chiếu đến nó bằng cách nào đó .. Bằng cách này, bạn có thể cho chúng tôi biết thêm về ứng dụng của bạn - bạn sử dụng Spring MVC? Nếu có thể bạn không cần sử dụng bộ lọc servlet – gerrytan

+0

@TechExchange. Tôi đã thử điều này nhưng nó gây ra lỗi nghiêm trọng cho ứng dụng của tôi. – Patan

Trả lời

0

Tôi nghĩ bạn không thể tiêm đậu bên ngoài bối cảnh mùa xuân và bộ lọc servlet của bạn nằm ngoài ngữ cảnh mùa xuân. Nếu bạn muốn có một bộ lọc bên trong ngữ cảnh thì tôi khuyên bạn nên sử dụng các trình chặn chặn web mùa xuân. Những kẻ đánh chặn này nằm trong bối cảnh mùa xuân và bạn có thể tận dụng khả năng chứa lò xo với những kẻ chặn này.

+1

Bảo mật mùa xuân sử dụng nhiều bộ lọc được xác định trong bối cảnh ứng dụng Spring. Đó là những gì 'DelegatingFilterProxy' là cho. –

+0

Câu trả lời này chỉ đơn giản là không chính xác –

14

Bạn có thể cấu hình các bộ lọc như bạn đã làm trong web.xml của bạn

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

và sau đó tiêm thuộc tính trong spring.xml

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

Cảm ơn bạn đã trả lời. Chúng ta có thể đăng ký tham số in-it của bộ lọc servlet làm tài sản cho thành phần hay chúng ta phải xác định nó trong phần tử trong tệp web.xml. – Patan

+0

Và cũng như tôi đã chỉ định mẫu url trong web.xml là /mywebservices/*. Tôi có cần phải thêm nó một lần nữa trong giá trị vào/myservice/** trong bean với bộ lọc idChainProxy không. Vui lòng giúp – Patan

+0

FilterChainProxy là tùy chọn và được sử dụng để kiểm soát tốt các bộ lọc được thực thi. Thông thường bạn không cần phải xác định nó một cách rõ ràng. Nếu nó có lý do nào đó, bạn sẽ không làm xấu nếu bạn cũng thêm bộ lọc của mình ở đó – ckoidl

Các vấn đề liên quan