我正在运行GlassFish Server 4.1并且我想定期调用一个方法,因此我使用@Schedule,该方法需要一个角色,所以我将@RunAs添加到该类中。但无论我如何尝试,我都无法让它发挥作用。
@Singleton
@Startup
@RunAs("Tool")
public class Test {
@Resource
private SessionContext ctx;
@Schedule(minute = "*/1", hour = "*")
public void checkExpiringAgreements() {
System.out.println("Has role Tool: " + ctx.isCallerInRole("Tool"));
}
}
这会每分钟运行一次,但会打印出来:
Info: Has role Tool: false
如果我有头发,我现在就把它撕掉。为什么这不起作用?
答案 0 :(得分:0)
检查安全领域,并确保主体具有您在@RunAs中设置的角色:
1)从 @RunAs javadoc :“角色必须映射到容器安全领域中的用户/组信息”。
2)从 EJB 3.2规范。 :“为企业bean建立运行身份,不会影响其调用者的身份,这是经过测试的访问许可身份企业bean的方法。”
注意 :由于Bean开发人员/应用程序汇编程序通常不了解安全配置详细信息,因此他们可以设置“逻辑”角色,以便部署者稍后将知道如何在groups-roles-users映射中进行设置。
答案 1 :(得分:0)
对于像我这样一直在寻找此问题的任何人:使用RunAs(“ Tool”)时,该角色将设置为拨出电话。
因此,您应该创建一个调用的其他EJB,并且在该EJB中您将拥有工具角色。