【问题标题】:Spring Security with EJBs带有 EJB 的 Spring Security
【发布时间】:2011-01-15 09:38:07
【问题描述】:
由于 EJB 授权对于我的需求来说太有限了,我想将 Spring Security 与 EJB 一起使用。对于身份验证,我也想使用 Spring Security。问题是,我是否可以在 EJB 中使用 Spring Security 上下文。
场景:
- 用户与 servlet 通信
- 通过 Spring Security 进行身份验证
- servlet 与 EJB 通信
- EJB 可以与其他 EJB 通信
- 使用 EJB 拦截器或直接在 EJB 方法中进行安全检查
安全上下文(通常保存在线程本地对象中)是否会通过 servlet 和 ejb 层传播,以便我可以将其用于安全检查?
【问题讨论】:
标签:
java
spring
jakarta-ee
spring-security
ejb
【解决方案1】:
如果您在集群中运行,或者 EJB 在不同的服务器上运行,那么每个服务器(当然)都将运行它自己的线程,因此不会发生传播。
如果它们都在同一台服务器上,那么它们可能会,但我认为这取决于供应商,除非您使用本地接口而不是远程接口。
【解决方案2】:
如果不涉及远程调用,您将能够访问 Spring Security 上下文,但您将无法直接使用 Spring Security 的任何需要代理对象的声明式安全功能。
您可能会使用 servlet 层中的 Spring bean(实现与 EJB 相同的接口,并委托给它们),并对它们应用安全性。如果您愿意,这也将允许您从 EJB 迁移出去。
另一种选择是考虑 Spring Security 的 AspectJ 支持,它应该与 EJB 一起使用。