Common problems with concurrency control
There are a few common reasons that logging in with the same user does not trigger a logout event. The first occurs when using the custom UserDetails
(as we did in Chapter 3, Custom Authentication) while the equals and hashCode
methods are not properly implemented. This occurs because the default SessionRegistry
implementation uses an in-memory map to store UserDetails
. In order to resolve this, you must ensure that you have properly implemented the hashCode
and equals methods.
The second problem occurs when restarting the application container while the user sessions are persisted to a disk. When the container has started back up, the users who were already logged in with a valid session are logged in. However, the in-memory map of SessionRegistry
that is used to determine if the user is already logged in will be empty. This means that Spring Security will report that the user is not logged in, even though the user is. To solve this problem...