【问题标题】:@Schedule and @RunAs in GlassfishGlassfish 中的 @Schedule 和 @RunAs
【发布时间】:2015-11-10 15:31:29
【问题描述】:

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

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

【问题讨论】:

  • 我想知道 Glassfish 是否需要对 Tool 角色进行额外配置来指定应该使用哪个特定身份。我知道 WebSphere Application Server 可以:stackoverflow.com/questions/33118280/…。否则,我只能说你对注释的使用看起来是正确的,所以应该可以让它工作。
  • 尝试通过@DeclareRoles({"Tool"})声明你在课堂上的角色。

标签: java glassfish ejb


【解决方案1】:

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

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

2) 来自 EJB 3.2 规范: “为企业 bean 建立 run-as 身份不会影响其调用者的身份,这些身份是测试访问权限的身份企业 bean 的方法。”

注意:因为 Bean Developer / Application Assembler 通常不知道安全配置细节,他们可以设置一个“逻辑”角色,以便 Deployer 将以后知道如何在 groups-roles-users 映射中设置它。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多