0

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

现在我已经成功地将我的 userobject 锁定为具有相同复杂数据结构的 Principal 对象。与之前一样,用户对象在身份验证后可用于视图,其初始状态存储在其中,但似乎我实现 UserDetails 的用户对象现在不可更改(无需在每个请求上创建新的身份验证对象)。它当然不能像我以前对会话所做的那样被藏回修改后的 SecurityContext 中。

所以我想我要么需要:

A. 重组我的 UserObject 以从那里获取所有其他内容,并在使用自定义过滤器进行身份验证后将它们添加到会话中,

B. 每次更改后创建一个新的身份验证对象(听起来超级昂贵......)

C. 其他一些我还没有看到或理解的东西......

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

4

1 回答 1

0

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

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

于 2012-05-24T15:15:07.907 回答