在使用容器管理的安全性的JSF2 / Java EE 6 Web应用程序中,基于表单的身份验证(j_security_check)需要请求受保护的页面,之后容器会为您处理登录过程,一旦经过身份验证,就会将浏览器重定向到请求的页面 .
有许多常见的情况,这不是您希望应用程序的行为方式 . 例如,您可能希望拥有同一页面的只读版本和可更新版本 . 如果用户未登录,您可以在该页面上放置“立即登录以编辑”按钮,并在用户登录时使字段可编辑 . 但在两种情况下都是相同的JSF页面,并且该视图不能既不受保护也不受保护,因此j_security_check似乎无法处理这种情况 .
那么,有两个问题:
1)可以操纵j_security_check来实现此功能吗?或者2)如果j_security_check不能,那么JSF / JavaEE webapps实现这一目标的“正常”方式是什么?
1 回答
登录用户也可以在不安全的页面中使用 . 您可以通过检查HttpServletRequest#getRemoteUser()的存在和HttpServletRequest#isUserInRole()的角色检查来执行登录检查,并相应地渲染受限制的组件 .
例如,仅在用户未登录时显示“登录编辑”按钮:
并且仅在用户登录或显示所需角色时显示“编辑”按钮: