当前位置: 首页 > 知识库问答 >
问题:

@RolesAllowed在Jersey资源上总是被拒绝(禁止)

吕树
2023-03-14

我正在尝试根据通过泽西岛/JAX-RS 公开的资源的角色来设置身份验证。此资源存在于 Glassfish 实例中,在该实例中,基于角色的身份验证(特别是通过@RolesAllowed)当前正在按预期工作。我正在一个 servlet 容器中运行泽西岛:

    <servlet-class>
        com.sun.jersey.spi.container.servlet.ServletContainer
    </servlet-class>

并且正在对我的资源强制执行基本身份验证;该要求正在按预期强制执行。我还向泽西提供了以下初始化参数:

    <init-param>
        <param-name>com.sun.jersey.spi.container.ResourceFilters</param-name>
        <param-value>com.sun.jersey.api.container.filter.RolesAllowedResourceFilterFactory</param-value>
    </init-param>

但是,当我尝试实际添加@Rlet准许注释时,所有访问都失败了。例如:

@Path("/my/resource")
@ManagedBean
@RolesAllowed({"SYSTEM"})
public class Resource {
    // Accesses with credentials for a user that has the SYSTEM role fail!
}

如果我注入一个安全上下文并调用context.isUserInRole(),它会为所有角色返回false。非常奇怪的是,如果我删除此资源的@R落款注释,并使用有效凭据发出请求,此类可以成功访问EJB,这需要用户与我最初尝试测试的角色相同。看起来泽西可能使用了错误的SecurityContext或类似的身份验证。其他人有过这种经历吗?

共有1个答案

孔波
2023-03-14

在这篇IBM文章中的一行让我大开眼界之前,我在一个类似的问题上挣扎了几个小时。令人惊讶的是,没有一本书或用户指南提到这个关键事实,没有它,认证就无法成功。

使用基于注释的安全性时,web.xml不是可选的;恰恰相反,

此外,

最后,如果使用Jersey,RolesAllowedDynamicFeature需要在应用程序类中注册,以启用基于注释的安全性。

其他那些与可怜的文档或缺少文档作斗争的人,就在那里。

 类似资料:
  • 我尝试了所有命令来推送我的映像docker集线器,但失败了。每次我都遇到相同的问题 请帮帮我。。。。

  • 我按照这个链接创建我的第一个docker映像,它成功了,现在我正试图从这个链接将这个映像推送到我的docker存储库中。但每当我试图将此图像推入存储库时,就会出现这种类型的错误。 有人能给我一些关于这个问题的提示吗?任何帮助都将不胜感激。 注意:我已成功登录docker

  • 我的疑问是如何通过rest客户端以指定的角色访问这个服务。

  • 我正在按照这个链接创建我的第一个docker映像,它成功了,现在我正在尝试从这个链接将此映像推送到我的docker存储库中。但是每当我试图将此映像推送到存储库时,我都会遇到此类错误。 注意:我已成功登录docker

  • 有很多人提到这个错误,但是, 下面是为lambda()创建的执行角色: 其中

  • 我试图使用gitlab ci将我的图像推送到docker repositoy存储库,但收到错误: 拒绝:请求的资源访问被拒绝错误:作业失败:退出代码1 我的gitlab ci。yml 他建立了正确的形象,但当去推动 我将$repository的存储库名称更改为“仅在此处粘贴”。 我已经给了正确的权限上hub.docker.com为用户已经使docker登录,有一个colborator上的存储库。