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

Glassfish中批量OSGi应用程序的授权问题-“当前用户无权执行此操作”

龚寂弦
2023-03-14

我已经在Glassfish 4.1.2下部署了一个OSGi maven应用程序,其中包含许多OSGi捆绑包。此捆绑包由一个webapp激活,该webapp通过其上定义的作业拨打一些电话。所有这些实际上都在以预期的方式工作。

web应用程序执行作业,作业调用OSGi捆绑包。当我试图从外部获取批处理状态时,问题就出现了。

目的是使用REST webservice部署其他Web应用程序,以便我可以在demmand上查询批处理状态。当我运行时:

private JobExecution getJob(int id) {

   JobOperator jobOperator = BatchRuntime.getJobOperator();
   JobExecution job = null;

   try {

           job = jobOperator.getJobExecution(id);

           System.out.println("job: " + job);
           System.out.println("name: " + job.getJobName());
           System.out.println("batchStatus: " + job.getBatchStatus());

   } catch (Exception e) {

           e.printStackTrace();

   }

   return job;

}

我有一个例外:

javax.batch.operations.JobSecurityException:当前用户无权执行此操作

我已经尝试在运行批处理的同一个web应用程序中部署webservices,只是为了测试行为,在发送批处理后,我一直得到相同的异常

奇怪的是,当我从webapp控制器运行批处理时,它会运行,我可以像魅力一样获得批处理状态:

@ViewScoped
@ManagedBean(name = "controller")
public class Controller implements Serializable {


   public void executeJobController() {

       JobOperator jobOperator = BatchRuntime.getJobOperator();
       Long executionIdDummy = jobOperator.start("DummyJob", new Properties());
       JobExecution jobExecutionDummy = jobOperator.getJobExecution(executionIdDummy);
       System.out.println("BatchDummyStatus : " + jobExecutionDummy.getBatchStatus());

   }
}

在JSR352规范、Javadoc或JavaEE教程中,我找不到任何关于批处理安全性的内容。

有可能做到这一点吗?是关于玻璃鱼JSR352的吗?我怎样才能做到这一点?

谢谢你的时间。

编辑

在按照@Scott Kurz的建议将大多数日志设置为精细后,我可以看到以下几行:

[2017-12-05T13:10:45.100-0500][glassfish 4.1][FINE][[javax.enterprise.web.core][tid:_ThreadID=64 _ThreadName=http-listener-1(4)][timeMillis:1512497445100][levelValue:500][CLASSNAME:org.apache catalina.authenticator.AuthenticatorBase][METHODNAME:invoke][安全检查请求GET/ws/webresources/facturacion/getJobs][2017-12-0513:10:45.101-0500][glassfish 4.1][FINE][javax.enterprise.web.core][tid:_ThreadID=64 _ThreadName=http-listener-1(4)][timeMillis:1512497445101][levelValue:500][CLASSNAME:org.apache.catalina.authenticator.AuthenticatorBase][METHODNAME:invoke][不受任何约束]]

这个词的意思很奇怪:

[2017-12-05T13:10:45.104-0500][glassfish 4.1][FINE][AS-WEB-NAMING-00005][javax.enterprise.WEB.NAMING][tid:_ThreadID=64 _ThreadName=http-listener-1(4)][timeMillis:1512497445104][levelValue:500][CLASSNAME:org.apache NAMING.resources.FileDirContext][METHODNAME:file][[无法读取文件/home/felipe/Documents/Programas/glassfish4/glassfish/domains/domain1/applications/ws/WEB-INF/classes/META-INF/services/javax.batch.operations.JobOperator]]

我曾尝试在localhost中像sudo一样运行glassfish,但我得到了相同的行为,并且得到了完全相同的错误。

共有1个答案

姬康平
2023-03-14

当我在OSGi环境中工作时,首先再次重新部署(手动取消部署并逐个部署)所有OSGi捆绑包,最后重新部署(取消部署和部署)Web服务所在的Web应用程序,然后,它开始工作。

在进行了一些重新部署之后,似乎没有以某种方式识别OSGi依赖项,从而导致了安全问题。

 类似资料:
  • 我正在尝试制作一个使用数据库的java应用程序。我已经下载了db2并创建了一个用户'student'。我的程序中有以下几行: 显然,我几乎不知道我在做什么,我不知道如何给予“学生”必要的特权。也就是说,我不知道什么用户可以给他特权,因为我从来没有创建过另一个用户。我看到有人提到过'db2admin'(我使用的是windows),但我不知道该如何处理这段信息。我不知道如何检查现有用户,也不知道对db

  • 我想在我的应用程序。如果已授予在android中不显示这是我的代码 @override public void onRequestPermissionsResult(int requestCode,String permissions[],int[]grantResults){

  • 介绍 除了内置的 用户认证 服务之外, Lumen 还提供了用户授权和资源访问控制的方案。有很多种方法与辅助函数能帮你处理授权逻辑。 总的来说,Lumen 中的使用和 Laravel 大同小异,我们会在这个文档中指出不同的地方,完整的用户授权文档还需要查阅 Laravel 授权文档 。 与 Laravel 的不同 定义权限 与 Laravel 相比,Lumen 的用户授权的不同之处在于如何定义权限

  • 我试图使用授权代码授予登录第三方客户端在护照Oauth服务器。 在oauth服务器中,我创建了id为3 secret:Ux6p201tRFrPQ5lLZI1RMce1GYD6qTJ9Qvj7nM2Z回调的客户机:'http://127.0.0.1:8001/callback' 但当我从第三方应用程序创建请求/重定向时,我得到:未经验证的401和重定向到登录,我也尝试添加 在AuthServiceP

  • 此问题不是此请求的重复,未授权执行此操作。Azure blobClient 我想从Azure函数访问Azure数据湖。我使用托管标识,并在我的数据湖IAM选项卡中为该功能分配了一个“所有者”角色。一切工作,但只有当我允许“所有网络”在我的数据湖。当我切换到“选定的网络”时,我会得到“此请求未被授权执行此操作”,尽管我将我的Azure函数的所有出站IP地址添加到了我的数据湖的防火墙规则中。 我在Az

  • 一段时间以来,我一直在撞墙,试图使用注释在JavaEE7 REST应用程序上启用身份验证/授权。无论我多么努力,我都会收到这个错误: 经过一些谷歌搜索,我发现人们建议删除文件夹,但这没有效果。我还将日志记录级别设置为FINE,它提供了这个相关的日志条目: 除此之外: 到目前为止,我只尝试在一个入口点实现它,代码就是这样的。首先,我声明角色“users”(与glassfish服务器上的组名相同),然