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

问题描述 投票:11回答:6

我试图弄清楚我的动态网络应用程序的另一个异常的原因 - https://github.com/double-whammy/affablebean我做了一个小改动,我得到了一个新的异常 - javax.ejb.AccessLocalException:未授权此客户端的客户端

在线答复说我做了以下 - http://ask.ozar.net/11/javax-accesslocalexception-client-authorized-invocation

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

另一个说更多 - http://glassfish.10926.n7.nabble.com/Persisting-Entity-javax-ejb-AccessLocalException-Client-not-authorized-for-this-invocation-td11197.html

您可以在domains / domainx / generated / policy /// {granted.policy,excluded.poliy}下找到策略文件。正授予在grant.policy中,否定授权在excluded.policy(如果有)中。 (在domaninx,x = 1,2,3等...)

在grant.policy中查找“EJBMethodPermission的非限定授权,其中name =会话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

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

java java-ee glassfish glassfish-4 payara
6个回答
19
投票

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

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


6
投票

我通过重新部署应用程序解决了这个问题。在NetBeans中,右键单击该项目,然后选择“清理并生成”。运行你的应用程序,瞧!


4
投票

之后我也看到了同样的错误:

  1. 对服务器配置的http-listener-2进行安全性更改:即禁用旧的TLS协议和一些较旧的Cipher套件,然后
  2. 重新启动glassfish。

我正在运行Payara 4.1.2.174。我同样找到了解决问题的方法是:

  1. 停止服务器
  2. 然后删除domains/DOMAIN_NAME/generated文件夹的内容
  3. 再次启动服务器

有关glassfish 3.1.2.2的一些文档似乎仍然相关:根据Glassfish Server High Availability Administration GuideDefault Synchronization for files and directories部分,文件夹applicationgenerated遵循以下规则:

application

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

如果更改了顶级子目录下的文件而未更改顶级子目录中的文件,则需要完全同步。在正常操作中,不会更改这些目录的顶级子目录下面的文件,并且用户不应更改此类文件。如果部署和取消部署应用程序,则无需使用完全同步来更新具有更改的实例。

generated

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

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

据我所知,只有generated目录才会重新生成application目录。


1
投票

我遇到了同样的问题。并通过删除文件夹域/ domainx / generated / policy / {appName} /并重新启动来修复。


1
投票

要重新部署应用程序或重新启动服务器/域正在运行,但可能是压缩机方法导致所有已部署应用程序的中断。

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

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

[#| 2009-12-18T20:03:38.788 + 0100 |警告| glassfishv3.0 | javax.enterprise.system.container.ejb.com.sun.ejb.containers | _ThreadID = 25; _ThreadName = HTTP线程池-8080-(2); |在EJB上调用期间发生系统异常ExampleEJB方法public void com.example.ExampleEJB.method(java.lang.String)javax.ejb.AccessLocalException:未授权此客户调用的客户端。

可以通过管理控制台重新加载应用程序(默认可通过<server-ip>:4848访问)或通过asadmin命令重新加载

asadmin disable <application-name>
asadmin enable <application-name>

如果单独重新加载不起作用,则必须先在granted.policy下删除受影响应用程序的<domain-root-dir>/<domain-name>/generated/policy/<application-name>文件,然后重新加载应用程序。

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.