5

一般案例:一个简单的应用程序,它通过 EJB (3.1) 公开其服务 - 其中大多数是无状态会话 bean(这里没有什么好玩的)和基于 SWING 的客户端,它们通过远程接口调用这些服务并执行它们必须做的事情。

安全性:我想对这个调用周期进行身份验证/授权,当然还要保护我的服务。显而易见的答案是在服务器中使用 JAAS 并在底层服务器上使用任何自定义布线设置。这仍然是一个选择

Apache Shiro:很多人都在谈论 Apache Shiro,事实上它具有非常简单的 API 和机制——可能独立于应用程序服务器。

技术问题:

  1. 会话:就我而言,我没有 HTTP 会话——据我所知,Shiro 至少需要某种我需要传递的 SESSION ID。在不污染我的业务 API 的情况下,在我的 RMI/IIOP 调用中向服务器注入用户凭据的任何好方法?

  2. 服务器端实现:对于我经历过的少数资源,我想我可以通过从 Singleton Ejb 3.1 bean 中“引用它”来实现 Shiro DefaultSecurityManager。还有其他想法吗?然后我可以轻松地创建一个拦截器并将其添加到我的远程调用中——所以当一个新调用通过我的远程 EJB 方法时——Shiro 拦截器来验证我的用户或检查特定权限。

任何评论/提示/示例?

非常感谢

4

1 回答 1

0

从 shiro 开始,尝试使用 ServiceLocator 模式。EJB 的查找在容器(JBoss、Netweaver、Weblogig 等)之间是不同的。

在 Application Server 中,尝试使用基于容器的安全约束(@RolesAllowed、@PermitAll、@Deny...)。JAAS 将使用用户的主体创建主题,因此只需使用容器授权(@RolesAllowed、@PermitAll、@Deny...)。当您从一个容器迁移到另一个容器时会更好。

于 2012-06-13T12:26:56.560 回答