【发布时间】:2012-08-29 09:28:28
【问题描述】:
我有一个托管 bean 绑定到我的 index.xhtml JSF 页面,它使用这样的注入 EJB:
// Code inside managed bean
@EJB
QueryEndpointLocal queryEndpoint;
public void search() {
//...
SearchResult result = queryEndpoint.search(query, resultFormat);
//...
}
QueryEndpoint 反过来利用另一个名为 QueryEngine 的 EJB:
// Code inside QueryEndpoint
@EJB
QueryEngine queryEngine;
目前,我有另一个与 QueryEngine 非常相似的 EJB,名为 QueryEngineLite。它们的区别在于QueryEngineLite 使用本地转储文件,该文件作为资源捆绑到企业应用程序,而QueryEngine 连接到 HBASE 数据库。它们都在启动时加载,并且有一个 @PostConstruct-annotated 方法来初始化连接。在已部署的应用程序中,QueryEndpoint 仅使用其中一个,而另一个只是在 Startup 和 PostConstruct 注释中被注释掉。我知道有更好的方法来处理这个问题,而我目前的解决方案是一个糟糕的解决方案,但这将在项目的未来阶段发生变化。我们计划利用 AppServer 管理的连接池与 HBASE 进行通信,但目前该连接由使用 HBASE 的 java API 的库处理。
现在,我在使用 Lite EJB 时没有任何问题。接口工作,网络服务工作,一切都很好。就在我使用 HBASE 绑定的 EJB (QueryEngine) 时,Glassfish 以 HTTP 403 错误响应对 index.xhtml 的请求,并在 server.log 中插入以下行:
INFO: JACC Policy Provider:Failed Permission Check: context (" App/App-war_war ") , permission (" ("javax.security.jacc.WebUserDataPermission" "" "GET") ")
INFO: JACC Policy Provider:Failed Permission Check: context (" App/App-war_war ") , permission (" ("javax.security.jacc.WebUserDataPermission" "" "GET:CONFIDENTIAL") ")
INFO: JACC Policy Provider:Failed Permission Check: context (" App/App-war_war ") , permission (" ("javax.security.jacc.WebUserDataPermission" "/favicon.ico" "GET") ")
INFO: JACC Policy Provider:Failed Permission Check: context (" App/App-war_war ") , permission (" ("javax.security.jacc.WebUserDataPermission" "/favicon.ico" "GET:CONFIDENTIAL") ")
我不知道为什么会发生这种情况以及如何解决。我应该注意,当使用第一个引擎 EJB 时,只有 JSF 页面不起作用。应用程序的其他部分(例如 Web 服务)可以与这两个引擎完美配合。提前感谢您的帮助。
【问题讨论】:
-
我按照网络上的一些链接的建议进行了取消部署/部署。没有运气。
标签: jsf jakarta-ee glassfish http-status-code-403 permission-denied