1. 程式人生 > >Spring Security會話控制(單使用者登入)

Spring Security會話控制(單使用者登入)

在專案開發過程中很難避免說單使用者登入系統,或者說對登入會話進行限制,例如說,只能兩臺機器登入使用者

那麼話不多說,直接看配置程式碼:

XML配置

如果你想限制單個使用者訪問你的應用程式的能力。Spring Security通過後面簡單的配置馬上啟用。首先你需要新增後面的監聽器到你的web.xml檔案。讓Spring Security獲得session的生存事件:

<listener>
    <listener-class>
        org.springframework.security.web.session.HttpSessionEventPublisher
    </listener-class
>
</listener>

然後新增後面的行到你的應用程式上下文:

<http>
    <session-management>
        <concurrency-control max-sessions="1" />
    </session-management>
</http>

這將放置使用者登入多次。第二次登入將導致第一次登入變成無效。通常我們更想放置第二次登入,在這種情況下,你可以使用:

<http>
    <session-management>
        <concurrency-control
max-sessions="1" error-if-maximum-exceeded="true" />
</session-management> </http>

第二次登入將被拒絕,如果基於表單的驗證被啟用這個使用者將會被髮送到 authentication-failure-url。如果第二次登入是通過其他非互動的機制,比如“記住我”功能,進行登入的。那麼一個“unauthorized”(401)錯誤將會被髮送給客戶端。如果你想替換成一個錯誤頁面,你可以為session-management新增一個session-authentication-error-url屬性。

JAVA配置

@Override
protected void configure(HttpSecurity http) throws Exception {
    //單使用者登入,如果有一個登入登入了,第二個使用者未登出不能登入
    http.sessionManagement().maximumSessions(1).maxSessionsPreventsLogin(true).expiredUrl("error.jsp");
    //退出刪除cookie
    http.logout().deleteCookies("JESSIONID");
    super.configure(http);
}