Glassfish中的@Schedule和@RunAs

时间:2015-11-10 15:31:30

标签: java glassfish ejb

我正在运行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

如果我有头发,我现在就把它撕掉。为什么这不起作用?

2 个答案:

答案 0 :(得分:0)

检查安全领域,并确保主体具有您在@RunAs中设置的角色:

1)从 @RunAs javadoc “角色必须映射到容器安全领域中的用户/组信息”。

2)从 EJB 3.2规范。 :“为企业bean建立运行身份,不会影响其调用者的身份,这是经过测试的访问许可身份企业bean的方法。”

注意 :由于Bean开发人员/应用程序汇编程序通常不了解安全配置详细信息,因此他们可以设置“逻辑”角色,以便部署者稍后将知道如何在groups-roles-users映射中进行设置。

答案 1 :(得分:0)

对于像我这样一直在寻找此问题的任何人:使用RunAs(“ Tool”)时,该角色将设置为拨出电话。

因此,您应该创建一个调用的其他EJB,并且在该EJB中您将拥有工具角色。