2010-09-13 8 views
2

J'ai mis en place un intercepteur pour effectuer un contrôle de sécurité sur l'adresse IP du client avec les annotations suivantes - @Provider @ServerInterceptor @Precedence (« sécurité »)Intercepteur de sécurité Resteasy - comment obtenir l'adresse IP du client dans l'intercepteur?

La méthode de pré-traitement prend les paramètres HttpRequest demande, Méthode ResourceMethod. Existe-t-il un moyen d'obtenir l'adresse IP du client à partir de l'objet Resteasy HttpRequest? Je peux mettre en place un filtre pour contourner ce problème, mais j'aimerais conserver les vérifications de sécurité au même endroit.

Répondre

1

L'adresse IP du client est disponible à partir de l'objet de requête. Mais vous ne pouvez pas l'utiliser à des fins de sécurité car il n'est pas unique par client: il peut s'agir simplement de l'adresse du proxy le plus proche, même le vôtre.

+0

C'est quelque chose que nous allons devoir vivre avec pour l'instant. Pouvez-vous me dire comment obtenir l'adresse IP de org.jboss.resteasy.spi.HttpRequest? –

+0

Ceci est vrai et généralement pour Java Servlets et d'autres systèmes. Leur point de référence pour le client d'en-tête HTTP (distant) adresse (IP) est seulement le saut le plus proche - pas la source. Il est préférable de le faire dans un routeur frontal et de contrôler un en-tête personnalisé qui peut ensuite être analysé sur le côté Java (de manière fiable). –

0

Cette (ma) réponse est fausse! Le HttpServletRequest est « injecté » que lorsque la classe de filtre est instancié, de sorte que l'instance « voir » le même HttpServletRequest pour toutes les demandes ultérieures (HttpServletRequest est toujours le premier !!!!!)


Vous peut injecter l'objet HttpServletRequest pour accéder à l'adresse IP du client (je l'utilise)

@Provider 
@Interceptor 
@Precedence("SECURITY") 
public class JAXRSInterceptor implements PreProcessInterceptor 
{ 

    **@Context HttpServletRequest request; // WRONG WRONG WRONG** 

    @Override 
    public ServerResponse preProcess(HttpRequest arg0, ResourceMethod arg1) throws Failure, WebApplicationException 
    { 


     System.out.println(request.getRemoteAddr()); 
     System.out.println(request.getRemoteHost()); 
    } 
Questions connexes