我有一个安全限制在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