我在 web.xml 中声明了一个安全约束:
<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 请求总是被拒绝。
编辑 :
我确实尝试了 post-redirect-get 并且这使得奇怪的行为消失了,正如预期的那样。
<rich:menuItem submitMode="ajax" label="User" action="/screens/user?faces-redirect=true"/>
但是,我不想每次都做 PRG,而且 PRG 并不能消除安全问题。
我在这里想念什么?感谢您的任何见解!