2012-03-13 32 views
11

Bir süzgeci bir filtreye enjekte etmeye çalışıyorum, ancak çalışmasını sağlayamıyorum.Yay ve @ DelegatingFilterProxy'deOtomatikleştirilmiş

Enjekte edilen fasulye daima "boş" dur. Bu aynı Bean'i Kontrolörler ve HandlerInterceptors'da otomatik olarak başarılı hale getiriyorum, bu yüzden doğru bir şekilde açıklamalı.

Filtre sınıfı, Denetleyicilerin geri kalanıyla aynı temel paketin altında.

Bu Bu filtre her istekte tetikliyor filtrenin

@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); 
    } 
} 

kodudur benim web.xml

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

ilgili kısmıdır.

Bunlar i ne eksik "Usuario" fasulye

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

yılında ek açıklamalar nelerdir? Teşekkürler!

+0

gerekmiyor olarak başvurulan Sınıf sınıfınızı 'filtre sınıfı' olarak mı kullanıyorsunuz? Filtrenizin Bahar tarafından yönetildiğinden emin misiniz? Burada @Configurable kullanmamalısınız? – skegg99

+0

Filtrenin adı, "filtre adı" ile belirtilen ile aynı şekilde CheckSession'dır. Bu ismi "filtre-adı" olarak değiştirirsem ilkbahardan "NoSuchBeanDefinitionException" alırım. Bu yüzden evet, filtre Bahar tarafından yönetiliyor (DelegatingFilterProxy aracılığıyla) ama otomatik telsiz mekanizması hala çalışmıyor ...:( – metacortechs

cevap

9

deneyin açıkça Bunun gibi ... senin CheckSession fasulye adını tanımlamak ve bu yararı olup olmadığına bakın:

@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); 
    } 
} 

anahtar bölümü şudur: @Component ("CheckSession")

Ve işleri daha güzel ve daha kolay bir şekilde ele almak için camelCase ismini alıp her yerde "checkSession" olarak adlandırıyorum (ilk harfi de-büyük harfle).

+0

Bu benim için çalıştı ve aynı sorunu yaşıyordum. – codemonkeyww

+1

Bu hiç çalışmıyor Filtrenin taranmasına rağmen hala otomatik çalışmaz – Rahul

+0

+1 Burada çok iyi çalışıyor! –

7

İşleri Bahar 3.2.6 tarih:

Öncelikle: adı bileşeni, 2 seçenek - yapmak tek

Seçenek A:Ek Açıklama- etkin bileşen tarama varsayar

@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); 
    } 
} 

B seçeneği: appliationContext.xml iletel fasulyesi

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

İkinci: Tel kadar Yay 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> 

Notlar: fasulye adı filter-name

+0

kullanıyorsunuz Aynı sorunla karşı karşıyayım. İlkbahar-önyüklemeyi kullanıyorum. Web.xml'i yapılandırmak için yokken önyükleme sırasında filtreyi nasıl yapılandırabilirim bunun gibi filtre? – kaluva