簡體   English   中英

無需受保護資源即可進行JSF / Java EE登錄

[英]JSF / Java EE login without requiring a protected resource

在使用容器管理的安全性的JSF2 / Java EE 6 Web應用程序中,基於表單的身份驗證(j_security_check)要求請求一個受保護的頁面,此后容器將為您處理登錄過程,身份驗證后將瀏覽器重定向到請求的頁面。

在許多常見方案中,這不是您希望應用程序表現的方式。 例如,您可能希望具有同一頁面的只讀版本和可更新版本。 如果用戶未登錄,則可以在該頁面上放置“立即登錄以進行編輯”按鈕,如果用戶已登錄,則可以使字段可編輯。但是,在兩種情況下,它都是相同的JSF頁面,並且該視圖不能既不受保護又受保護,因此j_security_check似乎無法處理這種情況。

因此,有兩個問題:

1)可以操縱j_security_check來實現此功能嗎? 或2)如果j_security_check無法實現,那么JSF / JavaEE Web應用程序實現此目標的“正常”方式是什么?

在不安全的頁面中也可以使用已登錄的用戶。 您可以通過檢查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')}" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM