Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAX-RS中的横切关注点_Java_Security_Jax Rs_Cross Cutting Concerns - Fatal编程技术网

Java JAX-RS中的横切关注点

Java JAX-RS中的横切关注点,java,security,jax-rs,cross-cutting-concerns,Java,Security,Jax Rs,Cross Cutting Concerns,我正在JAX-RS(JSR-311)中寻找一种机制,使我能够提取出一些特定于我的应用程序的横切关注点。例如,我的应用程序有特定的上下文,可以为每个请求查找或构建上下文。我希望能够在一个集中的位置执行这种类型的逻辑,然后以某种方式连接到上下文,由各种资源用于请求的其余部分。如果我可以只对URL的某些子集执行这些类型的操作,那就更好了 JAX-RS为路径段、cookie、头等提供的默认注入非常好,但是这些部分的自定义解释又如何呢?我真的不想每次我需要它的时候都去建造它。我希望有一种方法来指定如何构建

我正在JAX-RS(JSR-311)中寻找一种机制,使我能够提取出一些特定于我的应用程序的横切关注点。例如,我的应用程序有特定的上下文,可以为每个请求查找或构建上下文。我希望能够在一个集中的位置执行这种类型的逻辑,然后以某种方式连接到上下文,由各种资源用于请求的其余部分。如果我可以只对URL的某些子集执行这些类型的操作,那就更好了

JAX-RS为路径段、cookie、头等提供的默认注入非常好,但是这些部分的自定义解释又如何呢?我真的不想每次我需要它的时候都去建造它。我希望有一种方法来指定如何构建它,然后将上下文组件作为资源方法的一部分注入

有这样的钩子吗?我可以操纵提供者模型来实现这一点吗?顺便说一句,我希望尽可能长时间保持实现独立性(Jersey、RESTEasy等)


提前感谢您提供的任何见解。

在某种bizaro twist中,标准以一种奇妙的组合方式协同工作(JAX-RS和CDI),IBM编写了一个教程,其中可能涉及我的特定问题。在本文的一部分中,本文专门讨论了使用CDI(Java上下文和依赖项注入)装饰器和方法拦截器来实现JAX-RS资源中的横切关注点:

  • 然后
更新:我刚刚能够在GlassFish 3.1中使用它。关键(我发现的所有示例都没有显示)是您必须确保CDI管理资源实例的生命周期(这样它就可以用拦截器包装)。实例化您自己,然后在应用程序中返回。getSingleton()方法不起作用

我要回去看看能不能把它也放到码头上

更新2:Jetty(扩展来说,可能还有任何其他非J2EE servlet容器,如Tomcat)是一种使用CDI进行设置的痛苦。我认为GlassFish是一个更容易的集成。以下是一个博客,概述了Jetty所需的一些步骤:


您可以使用
ContextResolver
提供程序向资源或其他提供程序提供任何上下文。基本上,您需要为任何想要注入的上下文实现
javax.ws.rs.ext.ContextResolver
。别忘了用
@Provider
注释它,然后注册。

我不确定这就是我要找的,或者至少我不清楚这是如何解决的。理想情况下,我希望向我的资源添加一个注释,并使其触发其他功能(日志记录、安全检查、构建上下文对象)。当我查看提供者时,我不断遇到
MessageBodyReader
/
Writer
。你能详细说明我如何使用提供者来提供交叉方面吗?抱歉,但我似乎没有正确理解最初的问题(不应该在上午12点到达这里)。正确答案——仅使用JAX-RS规范是不可能实现横切方面的,但是如果您将JAX-RS与Spring结合起来,这可能成为可能。Spring为AOP提供了简洁的支持。基本上,您应该确保您的资源也注册为Springbeans。ApacheWink提供了与Spring的良好集成,因此您可以尝试使用它。