将 Spring Security 与 EJB 或 Spring 一起使用?

Posted

技术标签:

【中文标题】将 Spring Security 与 EJB 或 Spring 一起使用?【英文标题】:Using Spring Security with EJB or Spring? 【发布时间】:2011-01-15 07:55:47 【问题描述】:

我想构建一个基于 Java EE 6 的应用程序,但是 Java EE 的安全机制不足以满足我的需求。 Spring Security 似乎是保护我的应用程序的最佳方式。现在我想知道 Spring Security + EJB 是否是一个很好的组合,或者我是否应该更好地只使用 Spring。

我需要方法拦截、ACL 和可能的 URL 模式访问控制。我看到的主要问题是在 Spring Security 中使用 EJB 拦截。有问题吗?还有哪些方面可能存在问题?

您更喜欢 Spring Security + EJB 还是 Spring Security + Spring(仅)?

正如 skaffman 所说,真正的问题是 Java EE 与 Spring。 JBoss 有一个很好的comparison。

【问题讨论】:

【参考方案1】:

我对 EJB 不是很熟悉,但我一直认为它本质上是一种数据访问技术,或一种分发服务的方式。

Spring 本身和 Spring Security 模块被设计为非常轻量级且不引人注目。如果您正在构建 Web 应用程序并使用 Spring Security 进行登录/安全性,那么它并不关心甚至不知道您使用的是 EJB、JDBC 还是远程技术等。

【讨论】:

【参考方案2】:

Spring Security 不同于 Spring 框架。它们可以很好地协同工作,但 Spring Security 不需要您使用下面的 Spring Framework。

因此,从非常实际的意义上说,这并不重要,这变成了您更喜欢 EJB3 还是 Spring 的问题,而不管 Spring Security 是什么。

【讨论】:

【参考方案3】:

在花了很多天试图找到一种只使用 springsecurity 来保护 ejb 的方法之后,我采用了一种混合解决方案:JAAS + springsecurity。

客户端使用 JAAS 对服务器上的 ejb 进行身份验证,我创建了一个自定义 JAAS LoginModule,它将身份验证委托给 springsecurity 代码。

EJB 执行它们的逻辑使用方法,这些方法使用jsr250 注释(RolesAllowed)进行注释,这部分完全由 Spring Security 处理。

通过这种方式,我实现了 ejb 和 spring security 之间的明确分离,因此我的业务代码由 springsecurity 保护,可以完全移植到任何其他类型的 ApplicationServer,甚至可以作为独立应用程序运行。

【讨论】:

以上是关于将 Spring Security 与 EJB 或 Spring 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

像 Java EE 的 Spring Security 这样的框架?

Spring 与 EJB。 Spring可以替代EJB吗? [关闭]

将领域角色和资源角色与 Keycloak/Spring Security 一起使用

如何将 spring security 与 rest oauth2 服务和 spring social 集成?

什么时候需要或方便地使用 Spring 或 EJB3 或同时使用它们?

Apache Shiro 与 Spring Security