Glassfish/Payara javax.ejb.AccessLocalException:未授权客户端在server.log中进行此调用

Glassfish/Payara javax.ejb.AccessLocalException:未授权客户端在server.log中进行此调用,java,jakarta-ee,glassfish,glassfish-4,payara,Java,Jakarta Ee,Glassfish,Glassfish 4,Payara,我试图找出我的动态web应用程序出现另一个异常的原因- 我做了一个小的更改,得到了一个新的异常——javax.ejb.AccessLocalException:Client未授权进行此调用 网上回答说我做了以下事情- 尝试删除生成的策略文件。您应该能够在C:\glassfish-3\glassfish\domains\domain1\generated\policy下找到它们。 用域1替换您的域名 另一个说得更多- 您可以在domains/domainx/generated/policy/{gr

我试图找出我的动态web应用程序出现另一个异常的原因- 我做了一个小的更改,得到了一个新的异常——javax.ejb.AccessLocalException:Client未授权进行此调用

网上回答说我做了以下事情-

尝试删除生成的策略文件。您应该能够在C:\glassfish-3\glassfish\domains\domain1\generated\policy下找到它们。 用域1替换您的域名

另一个说得更多-

您可以在domains/domainx/generated/policy/{grated.policy,excluded.poly}下找到策略文件 正补助金在granded.policy中,负补助金在excluded.policy(如果有)中。(在Domanix中,x=1,2,3等)

在grated.policy中查找“EJBMethodPermission的非限定授权,其名称=会话bean的EJbName;其中 我认为可能是JpaPersonDao,并且有一个适用于save方法的方法规范


我尝试了第二个,在我的glassfish文件夹下看到许多文件夹: C:\glassfish4\glassfish\domains\domain1\generated\policy

C:.
├───AffableBean
│   ├───AffableBean
│   │       granted.policy
│   │
│   └───AffableBean_internal
│           granted.policy
│
├───__admingui
│   └───__admingui
│           excluded.policy
│           granted.policy
│
└───__default-web-module
└───__default-web-module
        granted.policy

如您所见,有这么多的grassed.policy文件。我应该修复哪一个?它是第一个文件夹下的文件吗?

我认为根本问题是由于glassfish服务器的缓存,因为您对现有的EJB类进行了一些修改


要解决此问题,您只需清除域文件夹中“生成”的文件夹/目录,然后重新启动glassfish服务器进行刷新。

我通过重新部署应用程序解决了此问题。在NetBeans中,右键单击项目并选择“清理并生成”。运行应用程序,瞧!我遇到了相同的问题。
并通过删除文件夹domains/domainx/generated/policy/{appName}/并重新启动进行修复。

llario Junior解决方案对我有效,但我也删除了glassfish应用程序目录中的所有文件。路径为glassfish\domains{domainname}\applications

我在以下情况下也看到了相同的错误:

  • 对服务器配置的http-listener-2进行安全更改:即禁用较旧的TLS协议和一些较旧的密码套件,然后
  • 玻璃鱼
  • 我正在运行Payara 4.1.2.174。同样,我发现解决问题的方法是:

  • 停止服务器
  • 删除
    domains/DOMAIN\u NAME/generated
    文件夹的内容,然后
  • 再次启动服务器
  • glassfish 3.1.2.2的一些文档似乎仍然相关:根据,部分,文件夹
    应用程序
    和生成的
    遵循以下规则:

    应用程序

    默认情况下,只有对应用程序目录中的应用程序顶级目录的更改才会导致DAS同步该应用程序的目录。当DAS重新同步应用程序目录时,所有应用程序的文件以及与应用程序相关的所有生成内容都会复制到实例中

    如果更改顶级子目录下的文件而未更改顶级子目录中的文件,则需要完全同步。在正常操作中,这些目录的顶级子目录下的文件不会更改,用户不应更改这些文件。如果部署和取消部署应用程序,则完全同步使用更改更新实例时不需要进行ronization

    生成的

    此目录包含为Java EE应用程序和模块生成的文件,例如EJB存根、编译的JSP类和安全策略文件。请勿修改此目录的内容

    重新同步应用程序目录时,此目录将重新同步。因此,仅重新同步部署到实例的应用程序的目录


    据我所知,
    生成的
    目录只有在
    应用程序
    目录处于运行状态时才会重新生成。

    重新部署应用程序或重新启动服务器/域的方法正在工作,但可能是导致所有已部署应用程序中断的强制方法

    为了避免整个服务器/域中断,只需重新加载受影响的应用程序即可

    您可以通过显示具体EJB和不可访问方法的
    server.log
    中的警告消息来识别受影响的应用程序

    [#|2009-12-18T20:03:38.788+0100 |警告| glassfishv3.0 | javax.enterprise.system.container.ejb.com.sun.ejb.containers | u ThreadID=25;_ThreadName=http-thread-pool-8080-(2);| A 调用EJB ExampleEJB时发生系统异常 方法公开无效 com.example.examplejb.method(java.lang.String) javax.ejb.AccessLocalException:未授权客户端进行此调用

    可以通过管理员控制台(默认可通过
    :4848
    )或通过
    asadmin
    命令重新加载应用程序

    asadmin disable <application-name>
    asadmin enable <application-name>
    
    asadmin禁用
    asadmin启用
    
    如果仅重新加载不起作用,则必须先删除受影响应用程序的
    //生成的/policy/
    下的
    授权.policy
    文件,然后重新加载应用程序


    请注意,有时这不是一个错误。如果您设置了EJB安全性,并且您的客户端没有足够的权限访问EJB方法,那么也可能会引发此警告消息。如果是这种情况,则需要确保您的客户端已将适当的
    角色分配给exe可爱的方法。

    这在我们的Glassfish环境中发生。我们的解决方案是取消部署我们的应用程序,在Glassfish目录中搜索包含我们的应用程序名称的任何文件/dir并手动删除所有这些文件,重新启动服务器并重新部署我们的应用程序。有时,Glassfish重新启动会有所帮助。非常感谢。生成的文件夹已被删除造成