在安全性Java EE应用程序中,有:
执行路径:m1->(m2-> m3)。这意味着:m1调用m2,m2调用m3。
安全配置:
我有两种情况:
(1)如果为用户(Bob)分配了学生角色。 Bob调用的执行m1->(m2-> m3)失败。当我在每种方法中打印调用者角色时:
(2)如果为用户(Bob)分配了学生角色和教授角色。由Bob调用的执行m1->(m2-> m3)成功。当我在每种方法中打印调用者角色时:
问题:在(1)中,为什么RunAs会影响Bob(调用者)的角色?但是,在(2)中,它不是。系统在@RunAs之前检查@RoleAllowed,不是吗?
答案 0 :(得分:0)
经过身份验证的用户将忽略@RunAs。
它旨在定义应用于通常不具有经过身份验证的用户主体的方法调用的角色,例如EJB超时方法和消息驱动Bean的onMessage
方法。