【问题标题】:CDI and EJB, security issues?CDI 和 EJB,安全问题?
【发布时间】:2012-10-22 16:17:05
【问题描述】:

自从我开始学习 JSF 以来,我正在审查我的代码。 最复杂的问题之一再次出现。 CDI 和 EJB 之间的决定。

我正在使用三层,我想知道在每一层上使用哪种类型的注释: - 支持 bean(MVC 中定义的控制器) - 服务层 - DAO 的

只要我不需要来自 EJB 的任何东西,我的支持 bean 就使用 CDI。 但我被其他两个困住了。我记得读过关于使用 EJB bean 的文章,因为池功能可以防止大量请求(或攻击,如果你愿意的话)。 所以简而言之,考虑到安全性或其他任何事情(不包括 ViewScoped),是否有任何理由使用 EJB(无状态、有状态、LocalBean 等)?

提前致谢。

【问题讨论】:

    标签: java security jsf ejb cdi


    【解决方案1】:

    你在这里犯了一个概念上的错误。 CDI 绝对不是 EJB 的替代品。默认情况下的 CDI 根本不提供事务管理。 CDI 是 bean 管理和依赖注入 API,而不是服务层 API。为了在 CDI 中管理事务,您必须添加另一个 API 以及一堆其他注释。

    CDI 可以替代例如 JSF 托管 bean 注释,但绝对不能替代 EJB 注释。

    所以没有有效的“CDI 与 EJB”问题。两者都有自己完全不同的目的。请注意,您可以在基于 CDI 的托管 bean 类中完美地注入基于 EJB 的服务类。

    关于安全性,不清楚您为什么在标题和标签中提到该部分,但 CDI 和 EJB 之间的决定与安全性无关(仅仅是因为没有有效的“CDI vs EJB”问题第一名)。

    【讨论】:

    • 所以基本上,只有视图中使用的 bean 应该(或可能)是 CDI?我发现这是一个很难完全理解的主题,我已经多次阅读。
    • 基本上,是的。使用托管 bean(JSF 或 CDI)作为控制器,使用 EJB 作为服务层。 EJB 的替代方案是 Spring(它也支持事务管理)。请注意,您还可以使用 @Named 注释 EJB,然后在视图中直接引用它,但这是极端的紧耦合。另见stackoverflow.com/a/12988579。毕竟,我认为您的故事中缺少的关键是您不了解事务管理的好处。我在回答你之前的问题时用一个简单的例子解释了这一点:stackoverflow.com/a/13012973。
    • 如果您想知道 EJB 中 @Stateless 与 @Stateful 的区别,请访问以下答案:stackoverflow.com/a/8889612。
    • 非常非常好的答案。我开始理解 EJB 的整个概念。看来我的学习是在浪费时间,事实证明你在最近的问题上给我的帮助更有价值。
    【解决方案2】:

    是的,当您需要对事务、并发、池等的开箱即用支持时。

    【讨论】:

    • 如果我不这样做,不是吗?关于安全,有必要吗?
    猜你喜欢
    • 2017-03-16
    • 2020-10-08
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 2012-06-19
    • 2014-06-05
    • 2014-08-23
    相关资源
    最近更新 更多