【问题标题】:Client not authorized for this invocation JAX-RS EJB error客户端未授权此调用 JAX-RS EJB 错误
【发布时间】:2014-03-22 23:31:22
【问题描述】:

我一直在寻找解决这个问题的方法,这里是......

我按照本教程从数据库自动生成 jax-rs Web 服务:https://netbeans.org/kb/docs/websvc/rest.html

这很好用,但是当我尝试通过使用 @RolesAllowed("myRole") 注释资源方法来保护应用程序时,我得到了这个异常......

“警告:EJB5184:在调用 EJB LicenceFacadeREST 期间发生系统异常,方法:public java.util.List resources.LicenceFacadeREST.findAll() 警告:javax.ejb.AccessLocalException:客户端未授权此调用”

我已将其缩小到 EJB JACC 策略检查失败。当我不在资源类中使用 EJB/JPA 时,即使存在 @RolesAllowed 注释也不会引发异常。

完整的 glassfish 堆栈跟踪可以在这里找到http://pastebin.com/AUPKWaqe

【问题讨论】:

标签: java security jakarta-ee ejb jax-rs


【解决方案1】:

这里有一些额外的信息,我遵循了下面的泽西安全指南。 https://jersey.java.net/documentation/latest/security.html#d0e10816

我使用 ContainerRequestFilter 进行身份验证,如果身份验证成功,我将在此处设置 SecurityContext 的自定义实现,rolesalloweddynamic 功能将与 rolesallowed 注释一起使用来授权对特定资源的访问。 这三个组件允许我在应用程序级别而不是容器级别进行身份验证和授权。

在我的应用程序从 servlet 转换为 EJB/servlet(我向 jax-rs 资源类中添加了无状态 ejb 注释)之前,这种方法非常有效。 EJB 使用 rolesallowed 注释在容器级别限制对其 bean 方法的访问,因此它与我的应用程序级别身份验证/授权冲突。

我仍在寻找一个全面的解决方案,即使它禁用了 EJB 级别的方法安全性,因此我可以将其留给 ContainerRequestFilter 进行身份验证,并让角色允许动态功能进行授权。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-27
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2016-06-29
    • 2013-08-03
    相关资源
    最近更新 更多