2011-09-03 6 views
5

Uygulamasında (/ app/*) önyüz URL'lerini engelleyen bir Spring HandlerInterceptor var. HandlerInterceptor içinden Handler'de hangi eylem yönteminin çağrılacağını belirlemek istiyorum. Buna bakmanın bir yolu var mı, engelleyiciye, istenen yola göre bakabilecek bir şey enjekte etmem gerekiyor mu?Spring HandlerInterceptor'dan bir Handler'da çağrılan yöntemi nasıl arayabilirim?

keseni şu şekildedir:

public class PageCacheInterceptor implements HandlerInterceptor {...} 

Böyle eşleştirilmiş:

<mvc:interceptors> 
    <bean class="com.example.web.interceptors.PageCacheInterceptor" /> 
</mvc:interceptors> 

Arkaplan (Sana isteyeceğiz biliyorum çünkü!). Uygulamama basit sayfa önbellekleme ekliyorum ve denetleyicideki her uygun yöntemde @Cacheable gibi bir açıklama kullanmak istiyorum. Önleyici, daha sonra, onu oluşturan eylemi temel alan bir yanıtın önlenip önlenmeyeceğini belirleyebilir. Örneğin

:

@RequestMapping(value = "", method = RequestMethod.GET) 
@Cacheable(events={Events.NEW_ORDER,Events.NEW_STAT}) 
public String home(Model model) {...} 

olaylar önbelleği geçersiz neden olanlardır. Örneğin/widget/liste eylemi, kaydedilmekte olan yeni bir widget tarafından geçersiz kılınmış önbellek yanıtına sahip olacaktır.

Düzenleme: En son Spring 3.1 M2'ye yükselttim, ihtiyacım olan özelliklerde this blog post belirtildiği gibi, ancak bu yeni sınıfların enjekte edilmesinin mi yoksa alt sınıfların mı gerektiğinin açıklığa kavuşmadığı net değil. Herhangi biri bir engelleyicide HandlerMethod'u almak için kullandı mı?

+1

Tamam yardımcı olur umarım:

Sonra bu tür bir şey yapabiliriz. Ancak ... '100'den az itibarı olan kullanıcılar, 8 saat boyunca kendi sorularını cevaplayamazlar. - Eğer koltuğunuzun ucundaysanız, çözüm beklerken sıkı durun ... –

cevap

7

çözüm aslında gerçekten kolay oldu böylece Tamam:

1) Spring yükseltme 3,1

2) RTFM (düzgün) bir HandlerInterceptor için Nesne dan işleyicisi yayınlayabilirsiniz Örneğin

HandlerMethod ve hedef denetleyici yöntemine, ek açıklamalarına vb. Erişmek için ,

3) Interceptor'daki HandlerMethod nesnesine. ,

HandlerMethod method = (HandlerMethod) handler; 
    Cacheable methodAnnotation = method.getMethodAnnotation(Cacheable.class); 
    if (methodAnnotation != null) { 
     System.out.println("cacheable request"); 
    } 
0
@Override 
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 
System.out.println("Pre-handle"); 
HandlerMethod hm=(HandlerMethod)handler; 
Method method=hm.getMethod(); if(method.getDeclaringClass().isAnnotationPresent(Controller.class)){ 
if(method.isAnnotationPresent(ApplicationAudit.class)) 
{ 
System.out.println(method.getAnnotation(ApplicationAudit.class).value()); 
request.setAttribute("STARTTIME",System.currentTimemillis()); 
} 
} 
return true; 
} 

Bu mesaj daha detaylara sahip bu ben bu anladım http://www.myjavarecipes.com/spring-profilingaudit-using-mvc-filters/