0

我正在构建一个 Java EE 6 Web 应用程序,用户必须通过会话范围的托管 bean 登录。什么是 EJB 拦截器以及它们如何在我的程序中帮助我。我一直在阅读有关它们的信息,但是我阅读的材料在解释上似乎有些荒谬。任何人都可以把它放在我的外行条款中。提前致谢

4

3 回答 3

1

我并不特别了解 Java EE 6 中的拦截器,但我知道 Struts 2 框架中的拦截器,实际上它看起来是一样的。

关键是横向任务不应该在你的类中(日志记录、识别、安全......)..所以它被决定放在拦截器中。

当请求到达时,在到达您的操作之前(和离开之后),我会说,它被其他一些可以验证、更改或执行您认为合适的任何事情的类拦截。

这是一种很好的编程方式,因此 POO 更受尊重。您的业​​务类不再被不应该存在的代码片段所污染,并且不再被应该从所有应用程序访问的代码片段所污染

于 2013-02-27T14:56:08.533 回答
1

拦截器是能够在方法调用或 EJB 或任何 CDI bean 的生命周期事件中插入自身的对象。

常见用法:

  • Profiling:您可以测量 EJB 方法花费的时间。因此,您可能会发现瓶颈。
  • 审计:记录谁以及何时有人使用 EJB 方法。
  • 日志:如果方法失败/成功(或抛出异常)写入文件,还可以让您知道方法调用的参数和返回值。
  • 自定义框架:您可以根据自己的业务规则创建自定义框架。
  • 生命周期:例如,如果某些 EJB 需要一些特殊资源,您可以将它们添加到 @PostConstruct 并在 @PreDestroy 时间关闭资源。
  • 自定义注入注解:创建您自己的注解并在使用 EJB 的方法之前对 JNDI 进行一些查找以注入资源。

拦截器是 EJB 最好的朋友:

  • 共享生命周期:连同它们的 bean 实例一起创建、销毁、钝化和激活
  • 相同的 Java 调用堆栈
  • 与它们拦截的 EJB 相同的 JNDI ENC 上下文
  • AroundInvoke 方法调用发生在与它们所插入的方法相同的事务和安全上下文中。

所以,这里是拦截器。正如莱昂纳多所说,出于您的目的(登录页面),过滤器会更好,但将拦截器保留在您的工具箱中。

于 2013-10-17T02:49:08.160 回答
0

IMO,我认为拦截器在这种情况下不会对您有太大帮助,因为它用于包装 EJB 方法,并且可能大多数这些方法只有在用户已经登录系统时才可用。检查每个 EJB 方法是否被授权用户请求听起来像是不必要的开销。当您尝试限制应用程序的使用时,过滤器通常是您真正想要的,因为它适用于请求级别,如果那里有一些 Session 对象,您可以检查用户是否登录。

拦截器对于剖析和审计等横向特性当然很有用。

于 2013-10-17T01:33:38.213 回答