Я создаю службу отдыха с использованием механизма аутентификации/авторизации, как описано в этом уроке: http://howtodoinjava.com/2013/06/26/jax-rs-resteasy-basic-authentication-and-authorization-tutorial/
В основном он использует интерфейс PreProcessInterceptor для сканирования целевого метода аннотаций (из javax.annotation.security), которые описывают требуемые роли для доступа к этому методу. Поскольку аутентификатор здесь является перехватчиком, он может отменить вызов целевого метода, возвращая при необходимости 401 (неавторизованный).
Проблема в том, что интерфейс org.jboss.resteasy.spi.interception.PreProcessInterceptor устарел в текущей версии RestEasy (3.0.1), и у меня возникают проблемы с попыткой реализовать то же поведение со стандартным JAX -RS.
Я использую интерфейс javax.ws.rs.ext.ReaderInterceptor для перехвата вызова. Но почему-то сервер никогда не называет его: перехватчик просто игнорируется.
Я регистрирую перехватчики/ресурсы так же, как и с предыдущим PreProcessInterceptor, и используя те же @Provider и @ServerInterceptor аннотации:
ServerApplication:
public class ServerApplication extends javax.ws.rs.core.Application {
private final HashSet<Object> singletons = new LinkedHashSet<Object>();
public ServerApplication() {
singletons.add(new SecurityInterceptor());
singletons.add( ... ); //add each of my rest resources
}
@Override
public Set<Class<?>> getClasses() {
HashSet<Class<?>> set = new HashSet<Class<?>>();
return set;
}
@Override
public Set<Object> getSingletons() {
return singletons;
}
}
SecurityInterceptor:
@Provider
@ServerInterceptor
public class SecurityInterceptor implements javax.ws.rs.ext.ReaderInterceptor {
@Override
public Object aroundReadFrom(ReaderInterceptorContext context){
//code that is never called... so lonely here...
}
}
Любые идеи о том, как я могу решить эту проблему?
Спасибо.