如何在EJB中使用RoleAllowed和RunAs吗?

时间:2016-07-16 06:40:29

标签: java-ee authorization

在安全性Java EE应用程序中,有:

  • 3 EJB:B1,B2和B3
  • 3种方法:B1中的m1,B2中的m2和B3中的m3

执行路径:m1->(m2-> m3)。这意味着:m1调用m2,m2调用m3。

安全配置:

  • 2个角色:学生和教授
  • m1允许学生角色
  • m2允许教授角色
  • m3允许学生角色
  • B1使用run-as 教授角色

我有两种情况:
(1)如果为用户(Bob)分配了学生角色。 Bob调用的执行m1->(m2-> m3)失败。当我在每种方法中打印调用者角色时:

  • m1:学生
  • m2:教授

(2)如果为用户(Bob)分配了学生角色和教授角色。由Bob调用的执行m1->(m2-> m3)成功。当我在每种方法中打印调用者角色时:

  • m1:学生,教授
  • m2:学生,教授
  • m3:学生,教授

问题:在(1)中,为什么RunAs会影响Bob(调用者)的角色?但是,在(2)中,它不是。系统在@RunAs之前检查@RoleAllowed,不是吗?

1 个答案:

答案 0 :(得分:0)

经过身份验证的用户将忽略@RunAs。

它旨在定义应用于通常不具有经过身份验证的用户主体的方法调用的角色,例如EJB超时方法和消息驱动Bean的onMessage方法。