web-dev-qa-db-fra.com

Obtenez l'objet de demande de servlet dans une classe de pojo

J'ai besoin d'obtenir l'URL actuelle de la page dans un pojo appelé d'une classe ACEGI (doit ajouter une logique personnalisée pour l'application que je travaille) et devez récupérer le HTTPServletQuest afin que je puisse obtenir le sous-domaine de la URL (sur laquelle la logique est basée).

J'ai essayé d'ajouter:

@Autowired
private HttpServletRequest request;

...

public void setRequest(HttpServletRequest request) {
    this.request = request;
}

public HttpServletRequest getRequest() {
    return request;
}

Cependant, lorsque j'essaie d'utiliser l'objet de demande dans mon code, c'est NULL.

Avez-vous une idée de ce que je fais mal ou de la façon dont je peux mieux faire ça?

27
NRaf

Si le haricot est de la demande Scoped, vous pouvez AUTOOWirer le HTTPServletRQuest comme vous le faites.

@Component
@Scope("request")
public class Foo {
    @Autowired private HttpServletRequest request;

    //
}

Sinon, vous pouvez obtenir la demande actuelle comme suit:

    ServletRequestAttributes sra = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
    HttpServletRequest req = sra.getRequest();     

Cela utilise le fil-local sous les couvertures.

Si vous utilisez le printemps MVC, c'est tout ce dont vous avez besoin. Si vous n'utilisez pas Spring MVC, vous devrez enregistrer A DemandeContextListener ou DemandeContextFilter dans votre web.xml.

48
sourcedelica