2012-12-08 64 views
2

我想限制用戶的會話數量。屬性<beans:property name =「maximumSessions」value =「1」/>不起作用

這裏是我使用的示例配置(取here):

<http> 
    <custom-filter position="CONCURRENT_SESSION_FILTER" ref="concurrencyFilter" /> 
    <custom-filter position="FORM_LOGIN_FILTER" ref="myAuthFilter" /> 

    <session-management session-authentication-strategy-ref="sas"/> 
</http> 

<beans:bean id="concurrencyFilter" 
    class="org.springframework.security.web.session.ConcurrentSessionFilter"> 
    <beans:property name="sessionRegistry" ref="sessionRegistry" /> 
    <beans:property name="expiredUrl" value="/session-expired.htm" /> 
</beans:bean> 

<beans:bean id="myAuthFilter" class= 
    "org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter"> 
    <beans:property name="sessionAuthenticationStrategy" ref="sas" /> 
    <beans:property name="authenticationManager" ref="authenticationManager" /> 
</beans:bean> 

<beans:bean id="sas" class= 
"org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy"> 
    <beans:constructor-arg name="sessionRegistry" ref="sessionRegistry" /> 
    <beans:property name="maximumSessions" value="1" /> 
</beans:bean> 

<beans:bean id="sessionRegistry" 
    class="org.springframework.security.core.session.SessionRegistryImpl" /> 

我沒有得到任何錯誤,可以看到SessionRegistry用戶的數量。但maximumSessions的值是1,我可以爲一個用戶創建2個會話(爲此我使用了不同的瀏覽器)。

下列財產也沒有導致任何異常:<beans:property name="exceptionIfMaximumExceeded" value="true" />。我還嘗試覆蓋equals()hashCode()以實現UserDetails(因爲它建議here)。

爲什麼我必須登錄兩次,一個用戶與此maximumSessions價值的能力?我應該以其他方式限制會話號碼嗎?任何建議,將不勝感激,在此先感謝。

回答

2

我的壞,我沒有正確重寫equals方法EqualsBuilder方法。正如here所示,在實際需要比較之前,我有.appendSuper(super.equals(obj))行,所以即使相同的用戶詳細信息也不同。沒有這條線一切都很好,我無法登錄兩次。

相關問題