2012-06-13 186 views
5

一般情况:一个简单的应用程序,通过EJB(3.1)公开其服务的简单应用程序 - 其中大部分是无状态会话bean(这里没有什么乐趣)和基于SWING的客户端即通过远程接口调用这些服务并做他们必须做的事情。Swing客户端上的Apache Shiro - EJB 3.1身份验证授权

安全:我想认证/授权这个呼叫周期,当然保护我的服务。显而易见的答案是在服务器中使用JAAS以及底层服务器上的任何自定义布线设置。这仍是一个选项

阿帕奇四郎:所以很多人谈论阿帕奇四郎确实也有很简单的API和机制 - 这可能是独立的应用服务器。

技术问题:

  1. 会议:对我来说,我没有一个HTTP会话 - 从我所了解四郎至少需要某种形式的会话ID,我需要传阅。在我的RMI/IIOP调用服务器时注入用户凭证的任何好方法都不会污染我的业务API?

  2. 服务器端实现:对于我经历的少数资源,我想我可以通过从Singleton Ejb 3.1 bean引用它来实现Shiro DefaultSecurityManager。任何其他想法? 然后,我可以很容易地创建一个拦截器并将其添加到我的远程调用 - 所以当一个新的调用正在通过我的远程EJB方法 - Shiro Intereceptor来验证我的用户或检查特定的权限。

任何意见/提示/例子?

非常感谢

回答

0

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

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

+0

您好Marcelo,感谢您的回答 - 但是如果我即将使用JAAS - 那么我没有发现任何配线shiro的巨大优势。我的想法是通过100%JAAS并使用Shiro实施所有任务。 – javapapo

+0

好的。如果您认为使应用程序依赖于shiro的供应商没有问题,则没有问题。我的意思是,如果你使用容器,cotainer已经有了安全实现。您可能会失去一些功能,如web.xml约束或注释约束安全性。 – Marcelo