Je travaille sur un service Web utilisant JAX-RS / JERSEY. p>
J'ai configuré un conteneurreQuestFilter em> dont le but est d'authentifier l'utilisateur. Il suffit de protéger certains des chemins avec authentification, le reste peut être disponible pour tout le monde. P>
Je veux récupérer des correspondancesResources / assortiesRésultats via ExtendendeuriInfo dans mon conteneurRequestFilter afin que je puisse vérifier si le chemin doit être protégé ou non. Existe-t-il un moyen de créer un filtre invoqué après que ExtenduriInfo est peuplé, mais avant que la classe de ressources correspondante et la méthode soit invoquée? P>
3 Réponses :
J'ai réussi à le comprendre.
L'approche que j'ai trouvée au travail est d'abandonner cela dans le em> conteneurrequestfilter em> et créer un ressourcefilterfactory em>. Dans le ressourceFilterFactory em> i peut utiliser p> pour déterminer si mon annotation personnalisée est présente. Si mon annotation est présente, je peux alors retourner une liste contenant mon authentificationContainerReQuestFilter em>. P> Un autre conseil pour que toute personne lisant cette réponse est que l'injection dans le conteneurRequestFilter ne fonctionnera pas lors de l'utilisation de la < em> approche em> ressourceFilterFactory. Ce que j'ai fait était de faire une injection dans la ressourcefilterfactory em>, puis transmettez les objets injectés au ContainerQuestFilter em> via son constructeur. P> p>
a trouvé un moyen de le faire avec conteneurreQuestFilter em>:
Voici une réponse plus générale (par exemple, si vous utilisez une autre implémentation JAX-RS comme CXF): p>
Ajoutez simplement les éléments suivants dans votre classe de filtres en tant que variable d'instance: P>
@Context p>
Info ResourceInfo; P>
"javax.ws.rs.container.resourceinfo est un nouveau contexte Jax-rs qui peut être injecté dans des filtres et des intercepteurs et
vérifié quelle ressource La classe et la méthode sont sur le point d'être invoquées. strong> " p> blockQuote> (Source: HTTPS: // cwiki.apache.org/confluence/display/cxf20doc/jax-rs+basics#jax-rsbasics-resourceInfo ) p>
On dirait que vous réinventant un peu de java ee! Si vous n'avez pas de EJB assis derrière votre service Web, envisagez d'en ajouter un. Vous serez capable d'annoter des rôles comme vous voulez.
Merci pour la suggestion Richard. Je n'ai pas encore regardé aux rôles tout cela encore, mais j'avais les rôles d'impression travaillés uniquement avec une méthode d'authentification i> configurée. J'ai une méthode i> Login i>, et après que l'utilisateur se connecte, il / elle communique avec le Webservice à l'aide d'une paire d'utilisateurs AccessToken +.
Certes, mon expérience avec authentification via des services Web est faible. Je sais que via l'interface de servlet, une API est disponible pour enregistrer un utilisateur de côté de la méthode d'autorisation. En bref, des servlets peuvent "coder leur propre" méthode d'authentification. J'avais toujours supposé qu'il y avait aussi des services Web.
Étant donné que vous utilisez un filtre, ce mécanisme doit être disponible pour vous: voir docs.oracle.com/javaee/6/afi/javax/servlet/http/... , java.lang.string)