JASPIC客户端登录Wildfly

时间:2015-05-28 12:24:13

标签: java java-ee wildfly-8 jaspic

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

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

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

我有抽象类

    public abstract class AbstractTask implements Runnable...

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

    mes_.submit(task);

我已经尝试将@RunAs放在这两个课程上,但都没有工作。

2 个答案:

答案 0 :(得分:2)

遗憾的是,Java EE中没有任何工具可以以编程方式登录Web上下文。

JASPIC应该已经提供了这一点,但它在某种程度上被遗忘了,或者是他们心中有其他事情的权力。 JASPIC规范文件最后在某处提到它们会在以后查看,但它从未发生过。

@RunAs有点受限,但是对于这种情况一般应该有效。您可能需要提供一些代码,WildFly可能会要求一些自定义配置。

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

答案 1 :(得分:1)

您应该显示更多代码。现在你的问题中的内容并不是很有用,因为它基本上是使用执行程序服务所暗示的。确保显示您放置@RunAs的确切类别。

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

因此订单是

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