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

时间:2014-07-22 21:00:37

标签: java java-ee glassfish glassfish-4 payara

我在这里尝试找出动态网络应用的另一个例外原因 - 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}下找到策略文件 正授予被授予。政策,否定授权在excluded.policy(如果有)中。 (在domaninx中,x = 1,2,3等......)

在grant.policy中查找“EJBMethodPermission的非限定授权,name =会话bean的EJbName;其中 我想可能是JpaPersonDao。并使用适用于save方法的方法规范。


我尝试了第二个,我在glassfish文件夹下看到了很多文件夹: C:\ glassfish4 \的glassfish \域\ domain1的\生成\政策

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文件。我应该修复哪一个?它是第一个文件夹下的那个吗?

6 个答案:

答案 0 :(得分:16)

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

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

答案 1 :(得分:6)

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

答案 2 :(得分:4)

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

  1. 对服务器配置的http-listener-2进行安全性更改:即禁用旧的TLS协议和一些较旧的Cipher套件,然后
  2. 重启glassfish。
  3. 我正在运行Payara 4.1.2.174。我同样找到了解决问题的方法是:

    1. 停止服务器
    2. 删除domains/DOMAIN_NAME/generated文件夹的内容,然后
    3. 再次启动服务器
    4. 有关glassfish 3.1.2.2的一些文档似乎仍然相关:根据Glassfish Server High Availability Administration Guide部分Default Synchronization for files and directories,文件夹applicationgenerated遵循以下规则:

        

      application

           

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

           

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

           

      generated

           

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

           

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

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

答案 3 :(得分:1)

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

答案 4 :(得分: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); | A   在 EJB ExampleEJB上调用期间发生系统异常   方法公共无效   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来执行该方法。

答案 5 :(得分:0)

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