2010-07-27 61 views
0

我的應用程序是運行在Glassfish 3.0.1上的Java EE 6應用程序。JavaEE安全性,訪問受限制頁面:退出的用戶被正確重定向。登錄的用戶不是

我正在使用Java EE安全性和JDBC領域。所以我給我的一些網頁添加了限制。 我添加了以下登錄,配置和安全性約束我的web.xml:

<!-- Redirect access of restricted pages to index.jsp --> 
<login-config> 
    <auth-method>FORM</auth-method> 
    <realm-name>jdbc</realm-name> 
    <form-login-config> 
    <form-login-page>/index.jsp?login=login</form-login-page> 
    <form-error-page>/index.jsp?login=error</form-error-page> 
    </form-login-config> 
</login-config> 

<!-- Restrict access for deanery related resources --> 
<security-constraint> 
    <display-name>Deanery Constraint</display-name> 
    <web-resource-collection> 
    <web-resource-name>Deanery Content</web-resource-name> 
    <description /> 
    <url-pattern>/deanery/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
    <description /> 
    <role-name>DEANERY</role-name> 
    </auth-constraint> 
</security-constraint> 

如果用戶登出這工作得很好。如果他試圖訪問/ deanery /中的頁面,他將被重定向到index.jsp(重定向到jsf)。

當用戶登錄,獲得合適的角色時,他可以成功訪問受限制的資源。所以一切都很好,直到這裏。

現在的問題:當權限較小的用戶(在我的例子中是學生)登錄到應用程序,並嘗試訪問受限制的頁面時,他不會重定向到在我的web.xml中配置的錯誤頁面。相反,他顯示一個醜陋的Glassfish的403頁:

HTTP狀態403 - 訪問請求的資源已被拒絕

遺憾的是,似乎沒有選擇捕獲異常在我CustomExceptionHandler。它甚至沒有顯示在我的server.log(儘管我切換到最好的水平)。

我該怎麼做才能讓用戶重定向到我的錯誤頁面,而不是顯示403頁面?爲什麼用戶沒有重定向到index.jsp,就像他退出時一樣?

編輯:

只是試圖與相應的代碼,以我的web.xml中添加了一個錯誤頁面。

<error-page> 
    <error-code>403</error-code> 
    <location>/index.jsp?login=login</location> 
</error-page> 

沒有效果,仍然Glassfish錯誤頁面,而不是我自己的。

回答

0

我只是javaEE中的一個新手,但我認爲問題在於當容器未被授權時,容器會在401 HTTP錯誤後重定向用戶。 403錯誤表示它知道用戶名/密碼但它不適合該資源。

所以我會嘗試爲403錯誤編寫一個過濾器並手動重定向。或者你應該隱藏這個頁面的鏈接給學生,如果這是可能的。

+0

我已經隱藏了受限資源的鏈接。但是如果有人在瀏覽器中輸入地址,我想讓他顯示正確的信息。 – ifischer 2010-07-27 15:22:19

+0

爲什麼評價爲負?佐爾坦說他是一個新手,他提供了他的解決方案,可能不是推薦的解決方案,但他試過了,對吧? – arg20 2011-03-30 05:09:14

0

嘗試403錯誤重定向到不同的頁面,而不是index.jsp將顯示錯誤消息。

+1

那對我來說沒有解決方案。當我爲所有403錯誤進行通用重定向時,我無法記錄一些有用的信息(哪些受限資源被訪問?哪個用戶?等),並向用戶顯示一些這些信息。 – ifischer 2010-08-14 09:40:10

相關問題