使用Spring Security / MVC 3.1重写UserObject的最佳实践

时间:2012-05-24 09:00:37

标签: spring-security implementation

在Spring Security / MVC之前,我有一个简单的相对不安全的userobject存储在我的会话中,它包含大量数据,我会在服务逻辑中更新,然后在每次修改时都存储回会话。

现在我已成功将userobject锁定为具有相同复杂数据结构的Principal对象。与之前一样,userObject在认证后可用于视图,并且其初始状态存储在其中,但似乎我的userObject实现UserDetails现在不可更改(不会在每个请求上创建新的认证对象)。它肯定不能仅仅被隐藏回到我以前修改过的SecurityContext中。

所以我想我要么:

一个。重构我的UserObject以获取所有其他东西,并在使用自定义过滤器进行身份验证后将它们添加到会话中,

B中。每次更改后创建一个新的身份验证对象(声音超级昂贵....)

℃。我还没有看到或理解的其他一些事情......

我检查了许多答案,这似乎是一个常见的问题,但没有一个解决我的具体问题/问题。我错过了一些非常明显的东西吗?

1 个答案:

答案 0 :(得分:0)

我不认为你错过任何东西。 UserDetails对象的意图是它是不可变的。它应该由UserDetailsS​​ervice加载,作为身份验证过程的一部分。

我会投票给A:重新构建你的用户对象并尽可能少地放入会话中。实际上,用户对象应该只存储与您的应用程序相关的权限,可能用户属性不会发生太大变化(名称,标题等),并且仅在应用程序需要它们时用于显示或处理目的。它应该存储您在用户使用应用程序时累积的数据(跟踪习惯,点击等)。这应存储在其他地方,例如数据库中。