@RolesAllowed 在 Jersey 资源上始终被拒绝(禁止)

2024-03-31

我正在尝试根据我通过 Jersey/JAX-RS 公开的资源的角色设置身份验证。该资源存在于 Glassfish 实例中,其中基于角色的身份验证(具体来说,通过 @RolesAllowed)当前正在按需要工作。我在 servlet 容器中运行 Jersey:

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

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

    <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>

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

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

如果我注入安全上下文并调用 context.isUserInRole(),它将为所有角色返回 false。非常奇怪的是,如果我删除此资源的 @RolesAllowed 注释,并使用有效凭据发出请求,则此类可以成功访问 EJB,这要求用户处于我最初尝试测试的相同角色。看起来 Jersey 可能正在使用错误的 SecurityContext 等进行身份验证。还有其他人经历过吗?


在一行之前,我在类似的问题上挣扎了几个小时this http://pic.dhe.ibm.com/infocenter/wasinfo/v8r5/index.jsp?topic=%2Fcom.ibm.websphere.nd.multiplatform.doc%2Fae%2Ftwbs_jaxrs_impl_securejaxrs_webcont.htmlIBM 的文章让我大开眼界。令人惊讶的是,没有一本书或用户指南提到这个关键事实,没有它,身份验证就无法成功。

当使用基于注释的安全性时,web.xml 不是可选的;恰恰相反,<security-constraint>元素必须存在; Web 容器在 JAX-RS 之前检查安全性,并且无需<security-constraint>,未设置正确的安全上下文。因此,当 JAX-RS 调用时isUserInRole(role),它总是返回 false。

此外,无论是<security-role>web.xml 中的元素或@DeclareRoles注释必须存在。

最后,如果使用泽西岛,RolesAllowedDynamicFeature需要在 Application 类中注册以启用基于注释的安全性。

其他那些因可悲的文档或缺乏文档而苦苦挣扎的人,就在那里。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@RolesAllowed 在 Jersey 资源上始终被拒绝(禁止) 的相关文章

  • 最终字段可能尚未/已经初始化[重复]

    这个问题在这里已经有答案了 可能的重复 如何处理抛出检查异常的静态最终字段初始值设定项 https stackoverflow com questions 1866770 how to handle a static final field
  • Spring @Validated 在服务层

    Hej 我想使用 Validated group Foo class 在执行方法之前验证参数的注释 如下所示 public void doFoo Foo Validated groups Foo class foo 当我将此方法放入 Spr
  • 如何停止使用扫描仪从标准输入读取多行?

    我正在做一个 JAVA 作业 应该处理多行输入 指令显示 输入是从标准输入读取的 给出了示例输入的示例 one 1 two 2 three 3 我不明白上面的示例输入 从标准输入读取 是什么意思 这是我编写的一个测试程序 它可以消除我的困惑
  • 用于获取随机数动词的 RESTful Web 服务

    如果您创建一个可以返回随机数的 RESTful Web 服务 您应该使用什么动词 我个人的感觉是使用 POST 因为你每次都会创建一个新的随机数 但我听到了一些使用 GET 的令人信服的论据 因为你本质上是在获取随机数 GET也有被缓存的危
  • AWS SDK 2 承担角色

    Bean public DynamoDbClient amazonDynamoDB final AssumeRoleRequest assumeRoleRequest AssumeRoleRequest builder roleSessio
  • Java时间转正常格式

    我有 Java 时间1380822000000 我想转换为我可以阅读的内容 import java util Date object Ws1 val a new Date 1380822000000 toString 导致异常 warnin
  • 在 Java 中的 JFrame/JPanel/JComponent 中添加 Web 浏览器

    我正在开发一个 Java 应用程序 需要在应用程序中使用 Web 浏览器 我见过一些应用程序这样做 例如在同一应用程序中单击左侧面板中的提要并打开右侧面板中的链接时的 RSS 阅读器 我想实现类似的功能 在java中可以做到这一点吗 Jav
  • 使用java在网页中进行字符编码

    如何使用java找出网页中的字符编码类型 打开与 URL 的连接 使用URL openConnection http download oracle com javase 6 docs api java net URL html openC
  • 开发人员实际上是否使用 vim 在 Windows 操作系统上编写代码(Java)? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何将测试类打包到jar中而不运行它们?

    我正在努力将我的测试类包含到 jar 包中 但不运行它们 经过一番谷歌搜索后 我尝试过mvn package DskipTests 但我的测试类根本没有添加到 jar 中 有任何想法吗 如果您遵循 Maven 约定 那么您的测试类位于src
  • 在Java中将日期“2020-05-22T12:51:20.765111Z”解析为Instant [重复]

    这个问题在这里已经有答案了 如何解析 2020 05 22T12 51 20 732111Z Java 中的 Instant I used LocalDateTime parse startTime DateTimeFormatter of
  • Java 常量枚举[重复]

    这个问题在这里已经有答案了 可能的重复 理解 Java 中的枚举 https stackoverflow com questions 1419835 understanding enums in java 为什么我们应该使用枚举而不是 Ja
  • SDK尚未初始化,请务必先调用FacebookSdk.sdkInitialize()

    我在实现 Facebook SDK 时遇到此错误 并且我tried https stackoverflow com questions 15490399 error inflating class com facebook widget l
  • 简单、安全的API认证系统

    我有一个简单的 REST JSON API 供其他网站 应用程序访问我网站的一些数据库 通过 PHP 网关 基本上该服务的工作原理如下 调用 example com fruit orange 服务器返回有关橙子的 JSON 信息 问题是 我
  • 动态创建 JSON 对象

    我正在尝试使用以下格式创建 JSON 对象 tableID 1 price 53 payment cash quantity 3 products ID 1 quantity 1 ID 3 quantity 2 我知道如何使用 JSONOb
  • 测量 tomcat 的排队请求数

    因此 使用tomcat 您可以设置acceptCount值 默认为100 这意味着当所有工作线程都忙时 新连接被放置在队列中 直到队列满 之后它们被拒绝 我想要的是监视此队列中项目的大小 但无法确定是否有办法通过 JMX 获取此值 即不是队
  • 一个类中有多个具有相同参数类型的方法

    我知道 至少已经有了关于这个主题的一个问题 https stackoverflow com questions 5561436 can two java methods have same name with different retur
  • 乔达时间中两个日期之间的天数

    如何找到两次之间的天数差异乔达时间 http www joda org joda time DateTime http www joda org joda time apidocs org joda time DateTime html实例
  • 需要将用户名和密码添加到 VB.NET Web 服务客户端中的 SOAP 标头

    我需要查询一个进行基本身份验证的 Web 服务 将用户名和密码放在请求标头中 我的客户端是用 VB NET Visual Basic Express Edition 2010 编写的 我已将 Web 服务添加到服务引用中 它为我自动生成了合
  • Express.js Passport认证自动失败跳过策略

    UPDATE 我已将代码从护照本地注册内部移至单独的处理程序 并且运行良好 问题在于 Passport 和本地注册的使用 但我不知道为什么 我使用 Node js Express Passport 进行身份验证和注册设置 这是以前使用过的标

随机推荐

  • 从 php 标头下载的 Mp3 文件不起作用

    你好呀 好的 事情就这样了 我的服务器上有我的 mp3 文件 每个文件都在其自己的文件夹中 该文件夹中有 mp3 和一个包含以下脚本的 php 文件 问题是 当我点击进入该 php 页面时 标头应该会自动下载 mp3 文件 但当它下载时 它
  • 由于意外的编码更改,Visual Studio 2008 项目文件无法加载

    在我们的团队中 我们在 Visual Studio 2008 中有一个数据库项目 该项目由 Team Foundation Server 进行源代码控制 每隔两周左右 一位同事签入后 项目文件将无法加载到其他开发人员的计算机上 错误信息是
  • MVC @import html 关键字

    我正在尝试使用 但 mvc 在 razor 视图中将其视为 net 代码 CS0103 名称 导入 在当前上下文中不存在 我如何解决它 谢谢 双倍 解决这个问题 更多详情请点击这里 http weblogs asp net scottgu
  • Maven groovy 编译失败且未解释原因

    I run mvn clean compile 并得到以下输出 INFO Scanning for projects INFO INFO INFO Building tendiwa core 1 0 SNAPSHOT INFO INFO I
  • Sais.js 对套接字请求的授权

    我正在尝试构建一个基于 sails js 的聊天应用程序 来自特定聊天的消息的 URL 如下所示 api chat id messages 当我使用 XHR 请求此 url 时 它会提供一个会话 cookie 并且 sails js 会构建
  • 使用和不使用“New”关键字定义数组有什么区别? [复制]

    这个问题在这里已经有答案了 看看这两个简单的程序 方案一 public class GenArray extends Applet byte myArray byte M byte o byte d byte e byte 1 方案2 pu
  • 不同的产品风格是否可以有不同的 build.gradle ?

    我正在工作的项目是为基于 Amazon 的设备以及 Android 构建的 几乎 95 的代码库在这两者之间是通用的 因此 我没有将这两个项目作为不同的项目 而是考虑使用产品风味将这两个项目放在一起 请告诉我是否还有其他更好的解决方案 但我
  • 如何在柔性容器中设置间隙(排水沟)?

    我正在尝试创建某种柔性容器的通用组件 该组件由容器及其连续的子组件组成 如果一行中的孩子太多 没有足够空间的孩子会去第二行 它可以使用 Flexbox 轻松实现 但我也希望能够在元素之间设置装订线 一行的第一个和最后一个元素不应分别具有左边
  • 如何避免两个不同的线程从数据库读取相同的行(Hibernate 和 Oracle 10g)

    假设我有两个不同的线程 T1 和 T2 它们同时访问同一个数据库并从同一个表中获取数据 现在 在线程启动时 我需要从表中获取数据并将行存储到集合中 然后我将使用该集合在其他地方执行一些工作 我不希望两个线程能够处理相同的数据 因为这会导致重
  • 如何修复“无法创建 ViewModel 类的实例”?

    我尝试了 MVVM 架构 实现了所有必需的类和方法 在 MainActivity 中创建 ViewModel 类的对象时 出现此错误java lang RuntimeException Cannot create an instance o
  • 使用 AJAX、MVC 实现 OOP PHP?

    I m new to the OOP paradigm and AJAX jQuery but would like to create a basic site employing MVC architecture in PHP with
  • AWS:保存每条 SNS 消息

    保存 记录在 AWS SNS 主题上发布的每条消息的最简单方法是什么 我认为可能有一个神奇的设置可以自动将它们推送到 S3 或数据库 或者可能是自动支持 HTTP 目标的数据库服务 但似乎并非如此 也许需要通过 Lambda 函数来完成 目
  • 使用 JQuery 重定向到第三方页面并预填充表单值

    当单击网页上的链接时 我想重定向到第三方网页 例如谷歌 并使用我的查询预填充搜索窗口并模拟点击 只用jquery就可以吗 您不需要任何 JavaScript 即 当您也想模拟点击时 我想 您想要有一个类似自定义搜索框的东西 然后打开Goog
  • 使用 setInterval 测试函数时 Mocha 和 Chai 测试失败

    我是 TDD 新手 正在使用 Mocha 和 Chai 我创建了一个测试 当值增加时该测试通过 但是当该增加放在 setInterval 内时 它会失败 这段代码的目的是让某些东西在屏幕上移动 function startMovingThi
  • 如何在 Android 中打开 raw 文件夹中的文件

    我正在使用 MultipartEntity 并且尝试引用原始文件夹中的文件 这是代码 MultipartEntity reqEntity new MultipartEntity reqEntity addPart new FormBodyP
  • 无法使用设备上的 Instruments 启动 iOS 应用程序

    应用程序安装 仪器启动 但仪器中的下拉菜单显示选择目标 并且应用程序从未启动 控制台说 6 14 11 2 36 22 PM Instruments 1951 XRMobileDeviceException while performing
  • Flexbox等列高设置主列高度?

    我做了这个例子 example max width 600px flex row display flex flex wrap wrap flex row col flex grow 1 flex basis 0 flex row cont
  • Javascript正则表达式适用于不在某些字符之间的所有单词

    我正在尝试返回不在方括号之间的所有单词的计数 所以给 don t match these words but do match these 最后四个词我数到了 4 这在 net 中有效 b
  • 保存终端 Bazel 构建输出

    是否可以保存在终端中运行的 bazel build 命令的输出 命令是 bazel build tensorflow examples image retraining label image bazel bin tensorflow ex
  • @RolesAllowed 在 Jersey 资源上始终被拒绝(禁止)

    我正在尝试根据我通过 Jersey JAX RS 公开的资源的角色设置身份验证 该资源存在于 Glassfish 实例中 其中基于角色的身份验证 具体来说 通过 RolesAllowed 当前正在按需要工作 我在 servlet 容器中运行