2015-09-08 74 views
0

我已經在我的客戶端代碼中針對運行spring-security的後端實現了ajax登錄/註銷。如何檢查用戶是否使用spring-security登錄?

我需要知道的是如何給我們說說這個用戶是否登錄

例如:。

  • 用戶登錄這將返回從POST到/登錄200。我可以設置一些變量來跟蹤客戶端的狀態。
  • 用戶刷新瀏覽器。現在國家失去了。

所以,我想知道是否有某種方式從客戶端檢查用戶是否通過身份驗證並純粹從客戶端登錄。

有沒有這樣的方式?

+0

做後端會吐如果用戶嘗試在沒有登錄的情況下首先訪問服務,則輸出401 HTTP狀態碼(禁止/拒絕訪問)?通常,ajax使用HTTP狀態代碼來確定請求是否成功 – MangEngkus

+0

它的確如此。當用戶未通過身份驗證時,它會返回401。 –

+1

然後每個獲得401的ajax請求都可以被認爲是用戶需要登錄的。您可以將其委託給將彈出或重定向到登錄頁面的處理程序。所以你不必在客戶端維護狀態。 – MangEngkus

回答

3

在JSP,可以訪問請求用戶prinicial(或)使用彈簧安全標籤庫得到證的用戶角色

實施例:訪問請求用戶在JSP主要

<c:if test="${pageContext.request.userPrincipal.name != null}"> 
    <label> 
    Hi ${pageContext.request.userPrincipal.name} ! Welcome to our site 
    </label> 
</c:if> 

實施例: 一種可變isAuthenticated取決於用戶登錄的授予角色。

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 

    <sec:authorize access="hasAnyAuthority('ROLE_ADMIN', 'ROLE_USER')" var="isAuthenticated"> 
    </sec:authorize> 

    <c:out value="${isAuthenticated}"/> 

即使您可以啓用/禁用某些使用相同標記的html

<sec:authorize access="hasAnyRole('ROLE_ADMIN')"> 
    <a href="delete/${file.id}">Delete</a> 
</sec:authorize> 

如果你想從javascript來獲得,那麼你需要公開後端方法返回request.userPrincipal

+0

謝謝Anudeep。我正在使用Javascript。我結束了對/ login設置GET返回用戶名。很棒。 –

0

什麼其實我是加一個端點到GET /login迴應。當用戶使用有效的會話登錄時,它會在響應正文中返回一個帶有用戶名的200。當用戶未登錄或具有無效會話時,響應返回401(並且沒有響應主體)。

然後我在javascript代碼處理程序彈出一個登錄模式,當它接收到401,當它接收200

精美的作品什麼也不做:)