Java JAX-RS中的横切关注点
我正在JAX-RS(JSR-311)中寻找一种机制,使我能够提取出一些特定于我的应用程序的横切关注点。例如,我的应用程序有特定的上下文,可以为每个请求查找或构建上下文。我希望能够在一个集中的位置执行这种类型的逻辑,然后以某种方式连接到上下文,由各种资源用于请求的其余部分。如果我可以只对URL的某些子集执行这些类型的操作,那就更好了 JAX-RS为路径段、cookie、头等提供的默认注入非常好,但是这些部分的自定义解释又如何呢?我真的不想每次我需要它的时候都去建造它。我希望有一种方法来指定如何构建它,然后将上下文组件作为资源方法的一部分注入 有这样的钩子吗?我可以操纵提供者模型来实现这一点吗?顺便说一句,我希望尽可能长时间保持实现独立性(Jersey、RESTEasy等)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、头等提供的默认注入非常好,但是这些部分的自定义解释又如何呢?我真的不想每次我需要它的时候都去建造它。我希望有一种方法来指定如何构建
提前感谢您提供的任何见解。在某种bizaro twist中,标准以一种奇妙的组合方式协同工作(JAX-RS和CDI),IBM编写了一个教程,其中可能涉及我的特定问题。在本文的一部分中,本文专门讨论了使用CDI(Java上下文和依赖项注入)装饰器和方法拦截器来实现JAX-RS资源中的横切关注点:
- 然后
ContextResolver
提供程序向资源或其他提供程序提供任何上下文。基本上,您需要为任何想要注入的上下文实现javax.ws.rs.ext.ContextResolver
。别忘了用@Provider
注释它,然后注册。我不确定这就是我要找的,或者至少我不清楚这是如何解决的。理想情况下,我希望向我的资源添加一个注释,并使其触发其他功能(日志记录、安全检查、构建上下文对象)。当我查看提供者时,我不断遇到MessageBodyReader
/Writer
。你能详细说明我如何使用提供者来提供交叉方面吗?抱歉,但我似乎没有正确理解最初的问题(不应该在上午12点到达这里)。正确答案——仅使用JAX-RS规范是不可能实现横切方面的,但是如果您将JAX-RS与Spring结合起来,这可能成为可能。Spring为AOP提供了简洁的支持。基本上,您应该确保您的资源也注册为Springbeans。ApacheWink提供了与Spring的良好集成,因此您可以尝试使用它。