什么是java ee6中使用的拦截器?

时间:2013-02-27 14:45:23

标签: jsf ejb java-ee-6 interceptor

我正在构建一个Web应用程序,用户必须通过sessioncoped的managedbean进行登录。 (使用java ee6),什么是拦截器,它们如何帮助我完成我的程序。我一直在阅读它们,但我读到的材料似乎有些荒谬的解释。没有人把它放在我的问题中。谢谢预先

3 个答案:

答案 0 :(得分:0)

我不熟悉Java EE 6中的拦截器,但我知道来自Struts 2框架的拦截器,它实际上看起来是相同的。

关键是横向任务不应该在你的课程中(记录,识别,安全......)..因此决定将它放在拦截器内。

当请求到达时,在到达(以及离开)您的行动之前,我会说,它被其他一些可以验证,更改或做任何您认为合适的课程的人拦截。

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

答案 1 :(得分:0)

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

拦截器对于分析和审计等水平功能肯定很有用。

答案 2 :(得分:0)

好吧,拦截器是能够在方法调用或EJB的生命周期事件(会话和消息驱动的bean)上插入自己的对象。

常见用法:

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

拦截器是EJB的最好朋友:

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

所以,这是拦截器。为了您的目的(登录页面),莱昂纳多说过滤器会更好,但请将拦截器放在工具箱中。