Oui c'est possible. Maillot de documentation dit:
La sécurité de l'information de demande est disponible par l'injection d'un JAX-RS
SecurityContext exemple à l'aide de @Contexte de l'annotation. Le injecté
contexte de sécurité de l'instance fournit l'équivalent de la fonctionnalité
disponible sur HttpServletRequest API. L'injection de contexte de sécurité
dépend de la réelle Jersey le déploiement de l'application. Par exemple, pour
un Maillot de l'application déployée dans un conteneur de Servlet, le Maillot
SecurityContext va encapsuler les informations à partir d'un contexte de sécurité
extrait de la Servlet demande. Dans le cas d'un Maillot de l'application
déployé sur un Grizzly serveur, le SecurityContext sera de retour
les informations récupérées dans le Grizzly demande.
Exemple:
@Path("basket")
public ShoppingBasketResource get(@Context SecurityContext sc) {
if (sc.isUserInRole("PreferredCustomer") {
return new PreferredCustomerShoppingBasketResource();
} else {
return new ShoppingBasketResource();
}
}
ou
@Path("resource")
@Singleton
public static class MyResource {
// Jersey will inject proxy of Security Context
@Context
SecurityContext securityContext;
@GET
public String getUserPrincipal() {
return securityContext.getUserPrincipal().getName();
}
}
Ou si vous voulez de la sécurité hors de la boîte avec les annotations de ces docs.
Maillot vous permet également de personnaliser la SecurityContext:
Le SecurityContext peuvent être récupérés directement à partir de
ContainerRequestContext via getSecurityContext() la méthode. Vous pouvez également
remplacez la valeur par défaut SecurityContext dans un contexte de demande avec un custom
à l'aide de la setSecurityContext(SecurityContext) de la méthode. Si vous définissez un
personnalisé SecurityContext instance dans votre ContainerRequestFilter, ce
contexte de sécurité de l'instance va être utilisée pour l'injection dans JAX-RS
ressources champs de la classe. De cette façon, vous pouvez mettre en œuvre une coutume
filtre d'authentification qui peuvent d'installation de votre propre SecurityContext être
utilisé. Pour assurer l'exécution rapide de votre authentification personnalisée
filtre de requête, définir le filtre de priorité pour l'AUTHENTIFICATION à l'aide
les constantes de Priorités. Une exécution rapide de vous d'authentification
filtre veillera à ce que tous les autres filtres, des ressources, des ressources méthodes
et sous-localisateurs de ressources va exécuter avec votre personnalisé
SecurityContext instance.
Voir des exemples sur la façon de demande d'utilisation des filtres avec Jersey. Et vérifier mon exemple suivant:
import javax.annotation.Priority;
import javax.ws.rs.Priorities;
@Provider
@Priority(Priorities.AUTHENTICATION)
public class AuthRequestFilter implements ContainerRequestFilter {
@Context
HttpServletRequest webRequest;
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
final HttpSession session = webRequest.getSession();
requestContext.setSecurityContext(new SecurityContext() {
@Override
public Principal getUserPrincipal() {
return new PrincipalImpl((String)session.getAttribute("USER_NAME"));
}
@Override
public boolean isUserInRole(String s) {
return false;
}
@Override
public boolean isSecure() {
return false;
}
@Override
public String getAuthenticationScheme() {
return null;
}
});
}
}
Avertissement! Cela a été introduit en Jersey 2.4.
Glassfish 4.0.0 utilise l'ancien Maillot 2.0, par conséquent, vous devrez mettre à niveau Jersey à l'aide de ces conseils (il n'est pas prouvé à travailler très bien). Ou la meilleure façon est de télécharger les nightly build de Glassfish 4.0.1. mais il n'est pas complètement stable pour le moment. J'espère que la nouvelle version sera bientôt disponible.
Mise à JOUR:
À l'heure actuelle (2014-02-14) Glassfish 4.0.1 nightly build utilise Jersey 2.5.1 et le contexte de l'injection fonctionne très bien.