1

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

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

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

我有抽象类

    public abstract class AbstractTask implements Runnable...

和一个具体的类,然后我将任务提交给托管执行器服务

    mes_.submit(task);

我已经尝试将@RunAs 放在两个类上,但都不起作用。

4

2 回答 2

2

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

JASPIC 应该提供这一点,但不知何故被遗忘了,或者他们的脑海中还有其他事情的权力。JASPIC 规范文档在最后某处提到了它,他们稍后会研究它,但它从未发生过。

@RunAs有点有限,但通常应该适用于这种情况。您可能需要提供一些代码,WildFly 可能需要一些自定义配置。

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

于 2015-05-29T11:33:48.623 回答
1

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

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

因此顺序是

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

于 2015-05-29T22:57:30.707 回答