Wildfly 中的 JASPIC 客户端登录

JASPIC client login in Wildfly

我有一个 Java EE Web 应用程序,它使用我的 EJB 上的 JASPIC 和 @RolesAllowed 注释进行保护。我使用托管执行程序服务来 运行 一些任务。

但是,这些任务并非 运行 任何用户,因此我在尝试访问我的 EJB 时遇到权限被拒绝的错误。我试过使用 @RunAs 注释,但这似乎不起作用。

如何以编程方式进行身份验证?

我有摘要class

    public abstract class AbstractTask implements Runnable...

和具体的class,然后我将任务提交给托管执行程序服务

    mes_.submit(task);

我试过将@RunAs 放在两个 class 上,但都不起作用。

不幸的是,Java EE 中没有用于在 Web 上下文之外以编程方式登录的工具。

JASPIC 应该提供这一点,但它不知何故被遗忘了,或者他们脑子里有其他事情。 JASPIC 规范文档在最后的某个地方提到了它,他们稍后会调查它,但它从未发生过。

@RunAs 有点受限,但在这种情况下应该可以正常工作。您可能需要提供一些代码,而 WildFly 可能需要为此进行一些自定义配置。

您的 @RolesAllowed 带注释的 EJB 方法是否仅从托管执行程序服务调用?在 WildFly 8 中,当从 Servlet 调用 EJB 时,@RolesAllowed 被破坏,但这应该在 WildFly 9 中被修复。

您应该显示更多代码。现在您的问题中的内容并不是很有用,因为它基本上是通过使用执行程序服务来暗示的。可以肯定的是,在您放置 @RunAs 的位置显示确切的 classes。

我觉得问题出在哪里,那就是您不能将 @RunAs 放在任何普通的 class 上,而是需要使用中间的不安全 EJB。 '@RunAs` 可能有点令人困惑,因为它没有为用它注释的方法设置角色,而是为传出调用设置角色。

因此顺序是

执行器服务 -> 任务 -> 使用@RunAs 方法的中间 EJB bean -> 使用@RolesAllowed 的安全 bean