我有一個安全限制在web.xml中聲明:的Servlet 3.0奇怪的聲明安全行爲
<security-constraint>
<web-resource-collection>
<web-resource-name>LoggedIn</web-resource-name>
<url-pattern>/screens/*</url-pattern>
</web-resource-collection>
<auth-constraint/>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
登錄,當我提出反對申請我得到預期的行爲,例如一個GET請求後
https://localhost:8443/Patrac/screens/user.xhtml
- >導致訪問被拒絕。
但是,當我做回發時,例如,
<rich:menuItem submitMode="ajax" label="User" action="/screens/user"/>
我可以查看屏幕。如果我做了第二次相同的回發,我得到了拒絕訪問信息。每次我提出回傳顯示屏幕,併發出403之間的瀏覽器交替顯示的URL之間的交替結果如下:
https://localhost:8443/Patrac/screens/user.xhtml
- >瀏覽器URL時,訪問被拒絕
https://localhost:8443/Patrac/public/403.xhtml
- >顯示用戶屏幕時的瀏覽器URL
我瞭解JSF中顯示的瀏覽器URL滯後於當前顯示的屏幕的方式,所以這並不神祕。但我不明白我是如何能夠在每次提交相同回發的時候查看屏幕的。 GET請求總是被拒絕。
編輯:
我曾嘗試重定向後得到,並且取得了奇怪的行爲消失,符合市場預期。
<rich:menuItem submitMode="ajax" label="User" action="/screens/user?faces-redirect=true"/>
但是,我不想每次都做PRG,而且PRG不會消除安全問題。
我在這裏錯過了什麼?感謝任何見解!
因此,起初您正在訪問公共目錄中的資源,然後轉向屏幕,並且如預期的那樣,它不會限制該資源。但之後,你嘗試再次查看相同的視圖我的意思是/ public/- > /screens/user.xhtml - > /screens/user.xhtml – Ravi 2012-07-30 16:01:48
這似乎並不重要,無論我第一次查看/公開還是不公開。如果我嘗試通過回發查看/屏幕下方的任何屏幕(例如/screens/xxxx.xhtml),我將獲得上述交替行爲(在顯示屏幕和發出403之間來回切換)。當我提交GET時,交替行爲就會消失。 – 2012-07-30 17:53:58