2013-06-17 24 views
13

Próbuję wdrożyć uwierzytelnianie użytkownika dla połączeń oddzwonić w jersey 1.11 filtrów.Jak dodać niestandardową odpowiedź i przerwać żądanie w jerseyach 1.11 filtry

To co próbowałem

package com.ilrn.session.webservices.rest.filter; 

import com.ilrn.entity.User;; 
import com.sun.jersey.spi.container.ContainerRequest; 
import com.sun.jersey.spi.container.ContainerRequestFilter; 

public class CustomFilter implements ContainerRequestFilter{ 

    @Override 
    public ContainerRequest filter(ContainerRequest request) { 
     User user = Helper.getCurrentUser(); 
     if(user == null){ 
      //Need to add custom response and abort request 
     } 
     return request; 
    } 

} 

Czy ktoś wie, czy coś żadnej metody, aby osiągnąć to samo?

Odpowiedz

35

W przypadku błędu, jeśli chcesz wysłać niestandardową odpowiedź, musisz rzucić wyjątek WebApplicationException. Utworzyć obiekt Response i wysłać go z powrotem za pomocą następującego konstruktora wyjątek:

WebApplicationException(Response response) 
      Construct a new instance using the supplied response 

Spróbuj to:

@Override 
public ContainerRequest filter(ContainerRequest request) { 
    User user = Helper.getCurrentUser(); 
    if(user == null){ 
     ResponseBuilder builder = null; 
     String response = "Custom message"; 
     builder = Response.status(Response.Status.UNAUTHORIZED).entity(response); 
     throw new WebApplicationException(builder.build()); 

    } 
    return request; 
} 
+0

dzięki pracował jak czar – Ankur

+0

@Ankur Im zadowolony, że to działa, dzięki za potwierdzenie :-) –

+0

@JunedAhsan Dziękuję za udzielenie odpowiedzi. Dokumentacja dla Jersey 2.X jest lepsza niż 1.X i ta część nie była zbyt jasna, dopóki nie zobaczyłem twojej odpowiedzi. –