我有一个场景,允许具有特定角色的用户根据自己的ID调用EJB方法。在EJB bean上,我有@RolesAllowed
注释以及用户的特定角色。对于基于角色的检查,方法调用可以正常工作,但如果图片中的用户调用传递其他用户的id的方法,该方法仍然会被调用。我如何避免RBAC的这种情况,或者我需要使用任何替代方法来实现这一点?基于RBAC控制一个用户对另一个用户资源的访问
0
A
回答
0
您的应用程序逻辑(身份验证逻辑)应阻止使用其他用户身份的方法调用。在某种程度上,当你这样做时,你在欺骗别人的身份。
因此,@RolesAllowed
注释应使用基于从框架检索的用户标识检索的角色,而不是用户手动传递的值。为了给你一个Servlet世界的例子,你需要使用HttpServletRequest对象的方法getUserPrincipal()。
我在这里引用了一段关于servlet的Java EE 6教程。你可以推断相同的原则ejbs。
检查来电显示编程 一般而言,安全管理应以这样的方式的容器是透明的Web组件来执行。本节中描述的安全性API只能用于Web组件方法需要访问安全上下文信息的较低频率情况。
- 的Servlet 3.0规定了以下方法,使您可以访问有关组件的调用者的安全信息:
- getRemoteUser,这就决定了与客户端身份验证的用户名。 getRemoteUser方法返回容器与请求关联的远程用户(调用者)的名称。如果没有用户被认证,这个方法返回null。
- isUserInRole,它确定远程用户是否处于特定的安全角色。如果没有用户通过身份验证,则此方法返回false。此方法需要一个String用户角色名称参数。
应在部署描述符中声明security-role-ref元素,并使用角色名称子元素包含要传递给方法的角色名称。声明和链接角色引用中讨论了使用安全角色引用。
- getUserPrincipal,它确定当前用户的主体名称并返回一个java.security.Principal对象。如果没有用户被认证,这个方法返回null。在由getUserPrincipal返回的Principal上调用getName方法将返回远程用户的名称。
您的应用程序可以根据使用这些API获取的信息做出业务逻辑决策。
相关问题
- 1. 如何让另一个用户访问我的Azure门户资源?
- 2. 一个用户的访问控制 - 允许 - 来源错误
- 3. 从另一个用户控件c访问userControl上的对象#
- 4. RBAC - 一个服务限制访问帐户
- 5. 更新基于另一个Web用户控件的Web用户控件
- 6. 用户限制的资源访问
- 7. 如何限制一个用户或一组用户访问fatwire中的资产
- 8. 如何使用c#访问一个用户控件到另一个控件?
- 9. 在基于角色的访问控制(RBAC)中使用会话
- 10. 如何从另一个用户控制
- 11. 编程添加web用户控制对象到另一个用户控制
- 12. 访问一个ASP.Net用户控件
- 13. WPF用户控制资源
- 14. 从另一个控件访问用户控件
- 15. 娱乐的用户控制中的动态控件基于在另一个用户控件中的选择
- 16. Yii2 RBAC基于组的每个用户的多个分配
- 17. 创建一个使用另一个用户控制
- 18. 如何从另一个用户控件访问form1上的label4?
- 19. 资源的访问控制VS基于角色的访问控制
- 20. 检查资源的可用性由另一个用户
- 21. 要学习如何设计用户访问控制的资源?
- 22. Rails mongoid - 访问user_id存在于另一个表中的用户
- 23. 另一个用于替换sqlplus以访问oracle的客户端?
- 24. 让一个控件基于另一个控件启用/禁用
- 25. 在另一个用户控件内部访问UserControl
- 26. 控制用户访问单个文档
- 27. 从另一个帐户访问用户的文件
- 28. 将文件写入一个用户,访问另一个失败
- 29. 基于角色的访问控制(RBAC)更简单的方法?
- 30. 带上下文的基于角色的访问控制(RBAC)?