一般情况:一个简单的应用程序,它通过 EJB (3.1) 公开其服务 - 大多数是无状态 session bean(这里没有什么有趣的)和基于 SWING 的客户端,它们通过远程接口(interface)调用这些服务和做他们必须做的事。
安全:我想验证/授权这个调用周期,当然也想保护我的服务。显而易见的答案是在服务器中使用 JAAS 并在底层服务器上使用任何自定义连接设置。这仍然是一个选择
Apache Shiro:很多人都在谈论 Apache Shiro,实际上它具有非常简单的 API 和机制 - 可能独立于应用程序服务器。
技术问题:
session :在我的例子中,我没有 HTTP session - 据我了解,Shiro 至少需要某种我需要传递的 session ID。在我的 RMI/IIOP 调用中向服务器注入(inject)用户凭据而不污染我的业务 API 的任何好方法?
服务器端实现:对于我浏览过的少数资源,我认为我可以通过从 Singleton Ejb 3.1 bean“引用它”来实现 Shiro DefaultSecurityManager。还有其他想法吗? 然后我可以轻松地创建一个拦截器并将其添加到我的远程调用中 - 这样当一个新的调用通过我的远程 EJB 方法时 - Shiro 拦截器来验证我的用户或检查特定权限。
任何评论/提示/示例?
非常感谢
最佳答案
在 shiro 中,尝试使用 ServiceLocator 模式。 EJB 的查找在容器(JBoss、Netweaver、Weblogig 等)之间是不同的。
在 Application Server 中,尝试使用基于容器的安全约束(@RolesAllowed、@PermitAll、@Deny...)。 JAAS 将使用用户主体创建主题,因此只需使用容器授权(@RolesAllowed、@PermitAll、@Deny ...)。当您从一个容器迁移到另一个容器时可能会更好。
关于java - Swing 客户端上的 Apache Shiro - EJB 3.1 身份验证授权案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11012746/