2014-01-24 29 views
2

我知道這裏有很多類似的問題 - 其中大多數是指用servlet過濾器實現這個概念。如何在JSP中檢查用戶是否已登錄(使用JSTL <if>語句),並顯示用戶名?

我正在使用基於表單的聲明式安全方法。而且,當某個用戶在登錄表單中輸入他(她)的憑據(用戶名和密碼)時,他將被重定向到某個/受保護的jsp頁面。該網頁的部分內容是:現在

Hello <%=request.getUserPrincipal().getName().toString()%> 
    You are able to view this page because you are authorized user. 

,如果用戶已登錄,我想顯示他/她的用戶名,不管它的安全jsp頁面或沒有。事情是這樣的:

<c:if test="${statement that checks if some user is logged in}"> 
    User: ${username of the logged user here} 
</c:if> 

編輯 我也想更換JSP腳本部分:<%=request.getUserPrincipal().getName().toString()%>適當JSTL命令。

回答

2

我錯過了pageContext對象在這兩種情況下,request本身並不是在JSP頁面中隱含的對象。

<c:if test="${not empty pageContext.request.userPrincipal}"> 
    User <c:out value="${pageContext.request.userPrincipal.name}" /> 
</c:if> 

和JSTL等效<%=request.getUserPrincipal().getName().toString()%>是:<c:out value="${pageContext.request.userPrincipal.name}"/>

+0

Whops ...忘了那個。這是什麼時候回答,而不嘗試它......修正。 –

5
<c:if test="${not empty pageContext.request.userPrincipal}"> 
    User: <c:out value="${pageContext.request.userPrincipal.name}" /> 
</c:if> 

使用c:out正確地轉義打印值並防止XSS攻擊。

+0

嘗試過,但沒有顯示出來,就像如果'if'說法是不TRUE;(順便說一句,我已經包括'JSTL核心taglib') – Vladimir

+0

好吧,當用戶登錄時,他的名字就顯示在受保護的頁面(上面的代碼,在問題部分)。所以,它應該設置。我嘗試了其他幾個jsp頁面,回到這個安全頁面,並顯示其登錄的用戶。 – Vladimir

+0

+1'c:out'。 @Wlad:你確定,你的校長是在請求而不是在會話範圍內嗎? – Kojotak

相關問題