我正在使用本教程中描述的身份验证/授权机制构建休息服务:http: //howtodoinjava.com/2013/06/26/jax-rs-resteasy-basic-authentication-and-authorization-tutorial/
基本上,它使用PreProcessInterceptor接口扫描目标方法的注释(来自javax.annotation.security包),这些注释描述了访问该方法所需的角色。由于这里的authenticator是一个拦截器,它可以取消目标方法调用,如果需要返回一个401(未授权)。
这里的问题是接口 org.jboss.resteasy.spi.interception.PreProcessInterceptor 在当前的 RestEasy 版本(3.0.1)中已被弃用,我在尝试使用标准 JAX-RS 接口实现相同的行为时遇到问题.
我正在使用 javax.ws.rs.ext.ReaderInterceptor 接口来拦截调用。但不知何故,服务器从不调用它:拦截器只是被忽略了。
我注册拦截器/资源的方式与之前的 PreProcessInterceptor 相同,并使用相同的 @Provider 和 @ServerInterceptor 注释:
服务器应用程序:
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;
}
}
安全拦截器:
@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...
}
}
关于如何解决这个问题的任何见解?
谢谢你。