views:

52

answers:

3

I have a Spring MVC app that does not protect updates of user data with transactions.

It assumes that only a single user is accessing the account data for that account at any one time.

However, if two users were to log in using the same authentication credentials, it is theoretically possible, although unlikely, for two database updates on the same user data to overlap and conflict.

Is there a simple way to protect against this in Spring Security?

+1  A: 

Add a column to the user database called "logged in". If that value is set, then refuse a second login.

Aaron Digulla
I'd rather do it the other way round: logout any logged-in user with the same credentials. Otherwise you will be unable to login until the session has expired.
BalusC
+4  A: 

Spring Security supports protection against concurrent logins. See 2.3.3 Session Management for instructions of how to enable it.

axtavt
A: 

The answer from Aaron Digulla is the best one. The suggestion from BalusC is not good because if someone steals your login credentials then he can gain access to the system and the legitimate user will be logged out. If that person is meant for evil then he can change the password and the legitimate user can't access his/her account anymore.

The best way is what Aaron suggested.

Kap