12

我试图在这里找出我的动态 Web 应用程序另一个异常的原因 - https://github.com/double-whammy/affablebean 我做了一个小改动,我得到了一个新异常 - javax.ejb.AccessLocalException: Client not授权此调用

一个在线回答说我做了以下事情 - 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

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

在granted.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

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

4

6 回答 6

20

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

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

于 2015-11-04T10:10:34.723 回答
8

我通过重新部署应用程序解决了这个问题。在 NetBeans 中,右键单击项目并选择 Clean and Build。运行您的应用程序,瞧!

于 2015-11-16T20:58:44.337 回答
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 服务器高可用性管理指南文件和目录的默认同步部分,文件夹applicationgenerated遵循以下规则:

application

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

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

generated

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

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

据我了解,只有在generated目录存在时才会重新生成application目录。

于 2018-04-04T03:16:26.907 回答
1

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

于 2017-01-19T07:21:36.767 回答
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-thread-pool -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分配来执行该方法。

于 2018-12-13T18:15:14.900 回答
0

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

于 2018-03-29T10:46:10.023 回答