我想限制用戶的會話數量。屬性<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
價值的能力?我應該以其他方式限制會話號碼嗎?任何建議,將不勝感激,在此先感謝。