2013-12-12 18 views
7

Jersey'in REST API'larımız için referans uygulamasını kullanmayı planlıyoruz. Prototip bir çaba olarak, ben de ContainerRequestFilters ile oynamaktaydım ve çoğunu uyguladım. Bu filtrelerin yürütüldüğü sırayı kontrol edebileceğimiz bir yol var mı?Jersey için Birden Fazla ContainerRequestFilter

Burada düşünmekte olduğum senaryo, güvenlik filtresinin çalışacak ilk kullanıcı olması ve gerekirse SecurityContext dosyasını oluşturması ve ardından diğer filtreleri çalıştırmasıdır.

+0

Hangi Jersey sürümü kullanıyor musunuz? – Jonas

cevap

8

Evet, bunu javax.annotation.Priority özniteliği ve varsayılan javax.ws.rs.Priorities ile denetleyebilirsiniz. Örneğin isterseniz:

  1. Günlüğü filtre her zaman ilk
  2. Doğrulama filtresi daima başkalarının sonra çalışmalıdır sonraki
  3. Özel filtre çalışmalıdır sonraki
  4. Yetkilendirme filtresi çalışmalıdır çalışır

You yapabilir:

@Priority(Integer.MIN_VALUE) 
public class CustomLoggingFilter implements ContainerRequestFilter 
{ 
    @Override 
    public void filter(ContainerRequestContext requestContext) throws IOException 
    { 
     // DO LOGGING HERE, THIS RUNS FIRST 
    } 
} 

@Priority(Priorities.AUTHENTICATION) 
public class AuthenticationFilter implements ContainerRequestFilter 
{ 
    @Override 
    public void filter(ContainerRequestContext requestContext) throws IOException 
    { 
     String authHeader = requestContext.getHeaderString(HttpHeaders.WWW_AUTHENTICATE); 

     // DO AUTHENTICATION HERE, THIS RUNS SECOND 
    } 
} 

@Priority(Priorities.AUTHORIZATION) 
public class AuthorizationFilter implements ContainerRequestFilter 
{ 
    @Override 
    public void filter(ContainerRequestContext requestContext) throws IOException 
    { 
     String authHeader = requestContext.getHeaderString(HttpHeaders.AUTHORIZATION); 

     // DO AUTHORIZATION HERE, THIS RUNS THIRD 
    } 
} 

@Priority(Priorities.USER) 
public class MyAwesomeStuffFilter implements ContainerRequestFilter 
{ 
    @Override 
    public void filter(ContainerRequestContext requestContext) throws IOException 
    { 
     // DO AWESOME STUFF HERE, THIS RUNS LAST 
    } 
} 
+0

Tek filtreli bir kütüphane kullanıyorum. Ve uygulamada kendimden bir tane var. Şimdi kütüphane filtre sınıfı için 'Öncelik'i ekleyemiyorum. Yani bu varsayılan önceliğe sahip. Uygulama filtresimin kitaplıktan önce çalışmasını sağlamak için doğru önceliği buradan nasıl ayarlayabilirim? –

+0

@KiranAB: filtrenizde, kitaplık filtresinden daha düşük bir öncelik belirleyin. – Rouliboy