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

时间:2012-11-28 12:39:24

标签: java jsf java-ee authentication j-security-check

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

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

所以,有两个问题:

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

1 个答案:

答案 0 :(得分: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')}" />