【问题标题】:What is the authenticated uesr's role - Java经过身份验证的 uesr 的作用是什么 - Java
【发布时间】:2017-11-29 13:07:03
【问题描述】:

早上好 我在 weblogic 10 上使用 ejb2(旧应用程序)。

我的会话 bean 中有一些方法可以安全地由特定角色执行。
我注释的每个 ejb 接口方法

 `@ejb.permission role-name="role1, role2"`

由于某些方法可能由几个不同角色的用户执行,我如何知道哪个角色运行该方法?

我知道如何知道“来电者是否处于某个角色”

Principal principal = ctx.getCallerPrincipal() ;
boolean isRole =  ctx.isCallerInRole("role2") ;

但是,有没有办法获得实际调用者的角色?像“getCallerRole()”之类的?

在 xml 文件“ejb-security-roles.xml”中,我指定了应用程序域中的角色

<security-role>
 <role-name>role1</role-name>
 <role-name>role2</role-name>
</security-role>

然后,这些角色中的每一个都在“weblogic-security-role-assignment.xml”中映射到 LDAP

<security-role-assignment>
  <role-name>role1</role-name>
  <principal-name>Role1User</principal-name>
</security-role-assignment> 
<security-role-assignment>
  <role-name>role2</role-name>
  <principal-name>Role2User</principal-name>
</security-role-assignment>`

任何人都可以提供帮助,指导我正确的思维方式吗?

【问题讨论】:

    标签: java roles user-permissions


    【解决方案1】:

    只需使用if (ctx.isCallerInRole("role2")) {

    根据甲骨文Accessing an Enterprise Bean Caller’s Security Context, 这是检查用户角色的唯一方法。

    【讨论】:

    • 问题是最终可能会添加更多角色,...比如,不是 2 或 3,而是 .. 10-12。代码会变得混乱......我需要访问这些角色才能写入数据库列 - 有点像事件创建:(
    • 是的,我明白了,您应该考虑使用其他安全管理库。例如弹簧安全projects.spring.io/spring-security
    • 是的,嗯..这将用于未来的迁移和更新项目。我想,我可以为我现在拥有的几个角色检查 isCallerInRole() 方式
    猜你喜欢
    • 2012-04-02
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 2016-01-17
    相关资源
    最近更新 更多