ユーザーのセッション数を制限したい。
以下は、私が使用した構成例です (こちらを参照)。
<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
であり、1 人のユーザーに対して 2 つのセッションを作成できます (そのために別のブラウザーを使用しました)。
次のプロパティでも例外は発生しませんでした: <beans:property name="exceptionIfMaximumExceeded" value="true" />
. また、 UserDetails の実装をオーバーライドしようとしequals()
ました(ここで提案されたように)。hashCode()
maximumSessions
この値で 1 人のユーザーが 2 回ログインできるのはなぜですか? 他の方法でセッション数を制限する必要がありますか? 事前に感謝します。