2012-03-13 31 views
11

Tôi đang cố gắng tiêm một hạt đậu mùa xuân vào một bộ lọc, nhưng không thể làm cho nó hoạt động.Mùa xuân và @Autowired on a DelegatingFilterProxy

Đậu được tiêm luôn là "không có giá trị". Tôi thành công autowiring này cùng một bean trong Controllers và HandlerInterceptors để nó được chú thích một cách chính xác.

Lớp bộ lọc nằm trong cùng gói cơ sở của phần còn lại của Bộ điều khiển.

Đây là phần có liên quan của web.xml của tôi

<filter> 
    <filter-name>CheckSession</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 
    <filter-mapping> 
    <filter-name>CheckSession</filter-name> 
    <url-pattern>/panel/*</url-pattern> 
    </filter-mapping> 

Đây là mã cho bộ lọc

@Component 
public class CheckSession extends OncePerRequestFilter implements Filter { 

    @Autowired private Usuario usuario; 

    @Override 
    protected void doFilterInternal(
     HttpServletRequest request, 
     HttpServletResponse response, FilterChain chain) 
    throws ServletException, IOException { 

     // always null 
     System.out.println("autowired " + usuario); 
     chain.doFilter(request, response); 
    } 
} 

Bộ lọc được kích hoạt trên mọi yêu cầu.

Đây là những chú thích trong "Usuario" đậu

@Component 
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS) 
public class Usuario implements java.io.Serializable { ... } 

am i thiếu gì? Cảm ơn!

+0

shouldn Bạn không sử dụng tên lớp chính xác của bạn trong 'lớp lọc'? Và bạn có chắc là bộ lọc của bạn được Spring quản lý? Bạn không nên sử dụng @Configurable ở đây? – skegg99

+0

Tên của bộ lọc là CheckSession, giống như được chỉ ra trong "tên bộ lọc". Nếu tôi thay đổi tên đó trong "tên bộ lọc", tôi nhận được một "NoSuchBeanDefinitionException" từ Spring. Vì vậy, tôi đoán có, bộ lọc đang được quản lý bởi Spring (thông qua DelegatingFilterProxy) nhưng cơ chế autowire vẫn không hoạt động ...: ( – metacortechs

Trả lời

9

Cố gắng xác định một cách rõ ràng tên cho đậu CheckSession của bạn và xem giúp ... Như thế này:

@Component("CheckSession") 
public class CheckSession extends OncePerRequestFilter implements Filter { 
    @Autowired private Usuario usuario; 

    @Override 
    protected void doFilterInternal(HttpServletRequest request, 
      HttpServletResponse response, FilterChain chain) 
      throws ServletException, IOException { 

     // always null 
     System.out.println("autowired " + usuario); 
     chain.doFilter(request, response); 
    } 
} 

Các phần quan trọng là thế này: @Component ("CheckSession")

Và để làm cho mọi việc đẹp hơn và dễ dàng hơn để đối phó với con đường, tôi sẽ camelCase tên và đổi tên thành "checkSession" ở mọi nơi (bỏ viết hoa chữ cái đầu tiên).

+0

Điều này làm việc cho tôi và tôi gặp vấn đề tương tự – codemonkeyww

+1

Điều này không có tác dụng gì cả. Mặc dù bộ lọc được quét nhưng tự động vẫn không hoạt động – Rahul

+0

+1 Hoạt động ở đây rất tốt! –

7

Hoạt động trên mùa xuân 3.2.6:

Đầu tiên: Tên thành phần của bạn, 2 lựa chọn - làm chỉ có một

Lựa chọn A:Chú - giả quét phần kích hoạt

@Component("checkSession") 
public class CheckSession extends OncePerRequestFilter { 

@Autowired 
Usuario usuario; 

@Override 
protected void doFilterInternal(final HttpServletRequest request, final HttpServletResponse response, final FilterChain chain) throws ServletException, IOException { 

    // not null 
    System.out.println("autowired " + usuario); 
    chain.doFilter(request, response); 
    } 
} 

Lựa chọn B:dây đậu qua appliationContext.xml

<bean id="checkSession" class="com.example.filter.CheckSession"></bean> 

Thứ hai: Wire lên mùa xuân DelegatingFilterProxy

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

<filter-mapping> 
    <filter-name>checkSession</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

Ghi chú: tên bean được tham chiếu như filter-name

+0

Tôi đang đối mặt với cùng một vấn đề.Tôi đang sử dụng spring-boot.Làm thế nào để cấu hình bộ lọc trong spring-boot vì tôi không có web.xml để cấu hình bộ lọc như thế này? – kaluva

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