首页 文章

JSF / Java EE登录,无需受保护资源

提问于
浏览
2

在使用容器管理的安全性的JSF2 / Java EE 6 Web应用程序中,基于表单的身份验证(j_security_check)需要请求受保护的页面,之后容器会为您处理登录过程,一旦经过身份验证,就会将浏览器重定向到请求的页面 .

有许多常见的情况,这不是您希望应用程序的行为方式 . 例如,您可能希望拥有同一页面的只读版本和可更新版本 . 如果用户未登录,您可以在该页面上放置“立即登录以编辑”按钮,并在用户登录时使字段可编辑 . 但在两种情况下都是相同的JSF页面,并且该视图不能既不受保护也不受保护,因此j_security_check似乎无法处理这种情况 .

那么,有两个问题:

1)可以操纵j_security_check来实现此功能吗?或者2)如果j_security_check不能,那么JSF / JavaEE webapps实现这一目标的“正常”方式是什么?

1 回答

  • 1

    登录用户也可以在不安全的页面中使用 . 您可以通过检查HttpServletRequest#getRemoteUser()的存在和HttpServletRequest#isUserInRole()的角色检查来执行登录检查,并相应地渲染受限制的组件 .

    例如,仅在用户未登录时显示“登录编辑”按钮:

    <h:commandButton 
        value="Login to edit" action="#{auth.login}" 
        rendered="#{empty request.remoteUser}" />
    

    并且仅在用户登录或显示所需角色时显示“编辑”按钮:

    <h:commandButton 
        value="Edit" action="#{someBean.edit(someItem)}" 
        rendered="#{not empty request.remoteUser}" />
    <!-- or -->
    <h:commandButton 
        value="Edit" action="#{someBean.edit(someItem)}" 
        rendered="#{request.isUserInRole('ADMIN')}" />
    

相关问题