2013-06-17 4 views
13

Sto cercando di implementare l'autenticazione utente per le chiamate di resto nei filtri jersey 1.11.Come aggiungere risposta personalizzata e richiesta di interruzione in jersey 1.11 filtri

Questo è quello che ho cercato

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

} 

Qualcuno sa qualsiasi metodo o qualcosa per ottenere lo stesso?

risposta

35

In caso di errore, se si desidera inviare una risposta personalizzata, è necessario lanciare un'eccezione WebApplication. Creare un oggetto Response e rinviarlo utilizzando la seguente eccezione costruttore:

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

Prova questo:

@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

grazie, ha lavorato come un fascino – Ankur

+0

@Ankur Sono contento che ha funzionato, grazie per la conferma :-) –

+0

@JunedAhsan Grazie per aver fornito la risposta. La documentazione di Jersey 2.X è migliore di 1.X e questa parte non era molto chiara, fino a quando non ho visto la tua risposta. –