【问题标题】:Correct way to use Apache Shiro on distributed system using RMI? [duplicate]在使用 RMI 的分布式系统上使用 Apache Shiro 的正确方法? [复制]
【发布时间】:2013-12-22 18:21:52
【问题描述】:

我正在寻找一些关于如何使用 Java RMI 将 Apache Shiro 实现为分布式系统(客户端-服务器)的一部分的指南/提示。

我已经看过这个帖子的答案:How to organize RMI Client-Server architecture,我正在考虑使用类似的东西。我计划的是在客户端登录时处理身份验证的远程对象(可能是单例?)。如果登录成功,则会创建一个新的会话对象。但我不太确定这个对象应该属于哪里以及要在其中存储哪些信息。它应该传递给客户端还是作为另一个远程对象存在。

我认为它应该用作某种会话外观,其中来自客户端的每个请求都由 Shiro 授权。 我不确定是否最好(并且可能)给客户端一个唯一的令牌/标识符,Shiro 知道并且可以根据每个方法调用进行授权,或者创建一个存在于每个方法调用的远程会话外观对象连接并存储有关当前用户的信息等。

我也不太清楚 Shiro 在多线程应用程序中如何处理 Subject 以及上述任何一个提议是否会导致冲突。

我期待听到您对此的看法 - 谢谢!

【问题讨论】:

    标签: java rmi distributed shiro


    【解决方案1】:

    正如我对该问题的回答所述,登录对象确实是单例,会话对象确实是另一个远程对象。

    我看不出你提到的关于向 Shiro 进行身份验证的两种选择之间有什么区别。在 Shiro 看来,会话对象是客户端。

    【讨论】:

    • 我认为令我困惑的是 Shiro 如何处理 currentUser(主题)。据我所知,主题已绑定到线程,我想要更多的控制权。我发现我可以只将主题存储在会话对象中,并且仍然可以访问 Subject.isPermitted、Subject.hasRole 等)。哇,我没想到这个想法的作者会回答 :) 根据您在另一个线程中的评论,我决定订购您的购买,因此希望那里有更多有用的信息:)
    • 我仍然需要找到更好的方法来检查权限。现在我只使用类似 public Object myMethod(){ if (subject.isPermitted("myAction")){ /.../ } else { throw new UnauthorizedException(); } } 但是当方法的数量开始增长时,它会很快变得丑陋。我还没有找到一个好的设计模式来处理这个问题,但这本身可能是一个全新的问题。
    猜你喜欢
    • 2021-07-19
    • 1970-01-01
    • 2011-12-24
    • 2021-01-19
    • 1970-01-01
    • 2015-06-18
    • 2017-06-10
    • 2013-06-07
    • 1970-01-01
    相关资源
    最近更新 更多