当前位置: 首页 > 面试题库 >

Resteasy 3.X PreProcessInterceptor的正确替代品是什么?

袁旻
2023-03-14
问题内容

我正在使用本教程中描述的身份验证/授权机制来构建Rest服务:http :
//howtodoinjava.com/2013/06/26/jax-rs-resteasy-basic-authentication-and-
authorization-tutorial/

基本上,它使用PreProcessInterceptor接口扫描目标方法中的注释(来自javax.annotation.security包),这些注释描述访问该方法所需的角色。由于此处的身份验证器是拦截器,它可以取消目标方法的调用,并在需要时返回401(未授权)。

这里的问题是在当前的RestEasy版本(3.0.1)中不推荐使用org.jboss.resteasy.spi.interception.PreProcessInterceptor接口,而在使用标准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;
    }
}

安全拦截器:

@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...
     }
}

关于如何解决此问题的任何见解?

谢谢。


问题答案:

RESTEasy 3.xx符合JAX-RS 2.0规范。

您尝试执行的操作可以(可能更好)完成:

@Provider
public class SecurityInterceptor 
      implements javax.ws.rs.container.ContainerRequestFilter {
     @Override
     public void filter(ContainerRequestContext requestContext){
       if (not_authenticated){ requestContext.abortWith(response)};
     }
}

因为ReaderInterceptor仅当底层MessageBodyReader.readFrom由标准JAX-
RS管道调用时才调用,而不是从应用程序代码中调用。

但是,未调用拦截器的原因可能是 @ServerInterceptor注释,它是RESTEasy扩展。

规范在§6.5.2中指出,拦截器是全局注册的,除非@Provider带有@NameBinding注释,否则我不知道是否RESTEasy可以处理@ServerInterceptor未明确注册的,如RestEASY拦截器未调用中所示。



 类似资料:
  • 目前,我们通过向java命令添加来使用增量垃圾收集器。在JDK 8中,不推荐使用此开关。那么,它的替代品是什么呢<代码>-XX:UseG1GC? 背景:该应用程序有8GB的堆,并创建了许多短生命对象。我注意到它经常暂停几秒钟来收集垃圾。出于好奇,我添加了,发现暂停消失了,整体性能提高了约4倍。 不幸的是,我没有找到任何关于触发器的垃圾收集器类型的信息。有CMS(并发标记和扫描)和新的G1(垃圾优先

  • 问题内容: 在教程中,我学会了使用。现在,我了解到,很多人对此表示反对。我已经尝试过,但随后它实际上将其发送到打印机。 那么我应该使用哪些替代方法,为什么不使用呢?w3schools和MDN都使用。 问题答案: 作为推荐的替代方法,您可以使用DOM操作直接查询节点元素并将其添加到DOM。

  • 本文向大家介绍lodash pluck()方法的替代品是什么?,包括了lodash pluck()方法的替代品是什么?的使用技巧和注意事项,需要的朋友参考一下 Pluck已从lodash 4中删除。这是因为它的作用与映射相同。 作为替换,您可以通过以下方式使用map函数- 示例 输出结果 这将给出输出-

  • 问题内容: 我正在尝试从旧版本的Hibernate(版本3)中更新一些代码。它使用了Hibernate 5中不再存在的两种接口方法。 Hibernate 5中的等效功能是什么? 问题答案: 您似乎正在寻找。例如, 您可能还需要检查TransactionStatus的文档,以查看交易状态的相对细粒度,因为您可能想要或需要比上述更多的包容性替代品。另外,请不要忽略的方法,您可能会发现有帮助。例如,

  • 在他对问题“类型类,和之间的区别”的回答中,Edward Kmett说 此外,即使是的一个超类,您最终还是需要类,因为遵守 严格来说还不足以证明这一点 因此,声称某样东西是一个比声称它是更强。 很明显,任何不是单子的应用函子都会自动成为的一个例子,它不是,但爱德华·科米特的回答暗示存在一个单子,它是,而不是:它的和

  • 问题内容: py2exe是否有替代品? 问题答案: cx_Freeze是跨平台的,并且具有相同的功能,或者您可以使用py2app,它仅在Mac上有效。