2

我有一個託管bean綁在我的index.xhtml JSF網頁,其中使用注入EJB這樣的:Glassfish的拒絕訪問JSF頁面,返回403 HTTP響應代碼

// Code inside managed bean 
@EJB 
QueryEndpointLocal queryEndpoint; 

public void search() { 
    //... 
    SearchResult result = queryEndpoint.search(query, resultFormat); 
    //... 
} 

QueryEndpoint又需要另一個名爲EJB的優勢QueryEngine

// Code inside QueryEndpoint 
@EJB 
QueryEngine queryEngine; 

目前,我還有一個EJB非常相似QueryEngine命名QueryEngineLite。它們的區別在於QueryEngineLite使用本地轉儲文件捆綁到企業應用程序作爲資源,而QueryEngine連接到HBASE數據庫。它們都在啓動時加載,並且有一個@PostConstruct-annotated方法來初始化連接。 QueryEndpoint僅在其中一個被部署的應用程序中使用,另一個則只有StartupPostConstruct註釋被註釋掉。我知道有更好的方法來處理這個問題,而我目前的解決方案是一個糟糕的解決方案,但是在項目的未來階段這將會改變。我們計劃利用AppServer管理的連接池與HBASE進行通信,但現在連接由使用HBASE的Java API的庫處理。

現在,我在使用Lite EJB時沒有任何問題。接口工作,Web服務工作,一切都很好。只是當我使用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服務)與兩個引擎完美協同工作。在此先感謝您的幫助。

+0

我按照網絡上的一些鏈接建議的方式做了取消部署/部署。沒有運氣。 –

回答

2

更新:我停止了部署應用程序的域,並再次啓動它,讓預部署的應用程序自動啓動。問題消失了,我可以查看index.xhtml JSF頁面,沒有任何問題。

我通過創建另一個域並重現問題來驗證此問題。 index.xhtml在首次部署後返回HTTP 403。重新啓動域可以解決問題。爲什麼?


的bug在Glassfish的問題跟蹤備案。 http://java.net/jira/browse/GLASSFISH-19064

+0

發生了同樣的問題。投了! – igr

+0

你有沒有想出任何其他可能的解決方案? –

+1

不幸的是,我只是提出玻璃魚需要重新啓動。希望glassfish 4即將發佈;) – igr