Méthode personnalisée d'Annotation à l'aide de Jersey AbstractHttpContextInjectable ne fonctionne pas

Je veux restreindre certaines méthodes si elles sont accessibles de façon non sécuritaire. Je suis de la création d'une annotation @Secure qui vérifie si la demande a été transmis sur des canaux sécurisés. Cependant, je ne peux pas créer une méthode injectable qui s'empare de la HttpContext de la demande.

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Secure {

}

public class SecureProvider<T> implements InjectableProvider<Secure, AbstractResourceMethod> {
    @Override
    public ComponentScope getScope() {
        return ComponentScope.PerRequest;
    }

    @Override
    public Injectable<?> getInjectable(ComponentContext componentContext,
                                       Secure annotation,
                                       AbstractResourceMethod method) {
        return new SecureInjectable();
    }
}

public class SecureInjectable<T> extends AbstractHttpContextInjectable<T> {
    @Override
    public T getValue(HttpContext context) {    
        //validation here

        return null;
    }
}

Je suis en utilisant le Dropwizard cadre, l'initialisation des Fournisseurs devrait être aussi simple que:

environment.addProvider(new SessionRestrictedToProvider<>(new SessionAuthenticator(), "MySession"));
environment.addProvider(new SecureProvider<>());
environment.setSessionHandler(new SessionHandler());

Utilisation:

@Resource
@Path("/account")
public class AccountResource {
    @GET
    @Path("/test_secure")
    @Secure
    public Response isSecure() {
        return Response.ok().build();
    }
}

À ce point, je suis en supposant qu'une HttpContext Injectable ne fonctionne pas sur une méthode, mais je suis à une perte quant à ce que d'autres options que je pourrais utiliser pour mettre en œuvre cette annotation.

À partir de votre exemple, je n'ai pas vraiment l'objectif que vous essayez d'atteindre. Ne vous souhaitez restreindre l'accès à certaines méthodes (url) si elles sont en cours d'accès non sécurisé manière, ou que vous aimeriez avoir injectable valeur booléenne (fournie comme argument à la méthode) représentant le type de demande sécurisé ou non sécurisé?
Je veux restreindre certaines méthodes si elles sont accessibles de façon non sécuritaire. Désolé, j'aurais dû faire plus clair!

OriginalL'auteur IAE | 2013-11-05