Swing 客户端上的 Apache Shiro - 身份验证授权的 EJB 3.1 案例
Posted
技术标签:
【中文标题】Swing 客户端上的 Apache Shiro - 身份验证授权的 EJB 3.1 案例【英文标题】:Apache Shiro on a Swing Client - EJB 3.1 Case for Authentication-Authorisation 【发布时间】:2012-06-16 06:50:12 【问题描述】:一般案例:一个简单的应用程序,它通过 EJB (3.1) 公开其服务 - 其中大多数是无状态会话 bean(这里没有什么好玩的)和基于 SWING 的客户端,它们通过远程接口调用这些服务和做他们必须做的事。
安全性:我想验证/授权这个调用周期,当然还要保护我的服务。显而易见的答案是在服务器中使用 JAAS 并在底层服务器上使用任何自定义布线设置。这仍然是一个选择
Apache Shiro:很多人都在谈论 Apache Shiro,实际上它具有非常简单的 API 和机制 - 可能独立于应用程序服务器。
技术问题:
会话:就我而言,我没有 HTTP 会话 - 据我了解,Shiro 至少需要某种我需要传递的 SESSION ID。在不污染我的业务 API 的情况下,在我的 RMI/IIOP 调用中向服务器注入用户凭据的任何好方法?
服务器端实现:对于我经历过的少数资源,我认为我可以通过从 Singleton Ejb 3.1 bean 中“引用它”来实现 Shiro DefaultSecurityManager。还有其他想法吗? 然后我可以轻松地创建一个拦截器并将其添加到我的远程调用中 - 所以当一个新调用通过我的远程 EJB 方法时 - Shiro 拦截器来验证我的用户或检查特定权限。
任何 cmets/提示/示例?
非常感谢
【问题讨论】:
【参考方案1】:从 shiro,尝试使用 ServiceLocator 模式。 EJB 的查找因容器(JBoss、Netweaver、Weblogig 等)而异。
在 Application Server 中,尝试使用基于容器的安全约束(@RolesAllowed、@PermitAll、@Deny...)。 JAAS 将使用用户的主体创建主题,因此只需使用容器授权(@RolesAllowed、@PermitAll、@Deny...)。当您从一个容器迁移到另一个容器时会更好。
【讨论】:
您好 Marcelo,感谢您的回答 - 但如果我还是要使用 JAAS - 那么我也没有发现接线 shiro 的任何巨大优势。我的想法是绕过 100% JAAS 和使用 Shiro 实现一切。 好的。如果您认为使应用程序成为依赖于 shiro 的供应商没有问题,那么没有问题。我的意思是,如果你使用容器,cotainer 已经有了安全实现。您可能会失去一些功能,例如 web.xml 约束或注释约束安全性。以上是关于Swing 客户端上的 Apache Shiro - 身份验证授权的 EJB 3.1 案例的主要内容,如果未能解决你的问题,请参考以下文章
Apache Shiro - 使用数据库读取用户、角色和权限
apache shiro:在 shiro.ini 中添加啥以使用 JWT 和 keycloak 作为授权服务器进行客户端身份验证