繁体   English   中英

Java EE 中的拦截器是什么?

[英]What are Interceptors in Java EE?

我试图澄清我关于 Java EE 中拦截器的概念。 我已经阅读了 Java EE 规范,但我对此并不感到困惑。 请为我提供一些有用的链接或教程,它们可以清除我的概念。 我们如何、何时、为什么使用拦截器?

拦截器用于从业务逻辑实现跨域关注,例如日志记录,审计和安全性。

在Java EE 5中,仅允许在EJB上使用拦截器。 在Java EE 6中,Interceptor成为了自己的新规范,在更高层次上进行了抽象,因此它可以更广泛地应用于平台中更广泛的规范集。

它们拦截相关目标类的调用和生命周期事件。 基本上,拦截器是一个类,其方法在调用目标类上的业务方法时调用,生命周期事件(如创建/销毁bean的方法)或EJB超时方法发生。 CDI规范定义了一种类型安全机制,用于使用拦截器绑定将拦截器与bean相关联。

在以下位置查找工作代码示例:

https://github.com/arun-gupta/javaee7-samples/tree/master/cdi/interceptors

Java EE 7还在Java Transaction API中引入了一个新的@Transactional注释。 这允许您在EJB之外拥有容器管理的事务。 此批注被定义为拦截器绑定,并由Java EE运行时实现。 @Transactional的工作样本位于:

https://github.com/arun-gupta/javaee7-samples/tree/master/jta/transaction-scope

我喜欢这个定义:拦截器是拦截EJB方法调用的组件。 它们可以在访问EJB时用于审计和日志记录。

在另一种情况下,它们可以用于我们需要检查客户端是否具有在数据库中的特定对象上执行事务的权限或许可的情况。 好吧,这就是拦截器派上用场的地方; 他们可以通过检查客户端/用户是否可以在该数据库对象或EJB上调用该方法来检查客户端/用户是否具有该权限。

但是,我仍然会查看以下文章和以下教程,以了解它们如何在Java EE设置/环境中使用。

拦截器用于向托管bean 添加AOP功能

我们可以使用@Interceptor注释将Interceptor附加到我们的类。 每当调用我们类中的方法时 ,附加的Interceptor将拦截该方法调用并执行其拦截器方法。

这可以使用@AroundInvoke注释来实现(参见下面的示例)。

方法拦截器

我们可以使用@AroundConstruct注释拦截类的生命周期事件(对象创建,销毁等)。

Interceptor和Servlet过滤器之间的主要区别是我们可以在WebContext之外使用Interceptor,但过滤器特定于Web应用程序。

拦截器的常见用途是记录,审计和分析。

有关更详细的介绍,您可以阅读本文。 https://abhirockzz.wordpress.com/2015/01/03/java-ee-interceptors/

在向 Controller 类发送请求之前和向响应发送请求之前,您可以将 Interceptor 用于要执行某些任务的地方。 例如:- 在这种情况下,您想在向 Controller 类发送请求之前验证身份验证令牌,您可以使用拦截器。 示例代码:

@Component
public class AuthInterceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest request, HttpServletResponse 
response, Object handler) throws Exception {
    //Here you can write code to validate the auth token.
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM