【问题标题】:Accessing a secure EJB as anonymous user on Wildfly 9在 Wildfly 9 上以匿名用户身份访问安全 EJB
【发布时间】:2017-07-03 09:28:58
【问题描述】:

我有以下设置:Wildfly 9 为远程 EJB 客户端提供服务,并运行一些 TimerTask 实例来执行一些逻辑。

大多数 EJB 方法由远程客户端调用,因此是安全的(通过 @RolesAllowed)。 现在,其中一些方法也将由服务器中的 TimerTask 调用,在这种情况下,我没有主体或安全上下文,这会导致 EJB 方法调用失败。

我的解决方法是这样的:

EJB:

@RolesAllowed({"readRole"})
public void readSomething() {
    this.readSomethingImpl();
}


public void readSomethingUnrestricted() {
    this.readSomethingImpl();
}

readSomething() 是远程接口的一部分,readSomethingUnrestricted() 是本地接口的一部分。

缺点是我有一组相当大的 EJB 服务方法,我不想复制所有方法(一个限制用于远程调用,一个不限制用于本地调用)。

有没有更好的方法来实现这个?

谢谢!

【问题讨论】:

    标签: java security jakarta-ee ejb wildfly


    【解决方案1】:

    您应该能够通过使用@javax.annotation.security.RunAs("readRole") 注释您的计时器任务来完成您想要的。

    【讨论】:

    • 谢谢史蒂夫。不幸的是,问题仍然存在。查看文档,此注释处于类级别。仍然得到同样的错误。也许它会有所不同,因为我的 TimerTask 是 EAR 内的 WAR 的一部分,它试图与同一 EAR 的 JAR 中的 EJB“对话”。
    猜你喜欢
    • 1970-01-01
    • 2014-11-07
    • 2021-07-07
    • 1970-01-01
    • 2014-02-08
    • 2018-09-30
    • 2023-03-10
    • 1970-01-01
    • 2011-03-18
    相关资源
    最近更新 更多