我正在使用spring安全性插件,因此可以使用springSecurityService.currentUser方法来访问当前登录的用户。但是,我假设在每个控制器操作中获取当前用户,然后基于返回的用户执行操作不是推荐的最佳实践。
示例:
登录用户点击指向其个人资料页面的链接 - 控制器获取当前用户并返回数据以填充此用户的个人资料页面。
在个人资料页面上登录用户更改状态 - 控制器获取当前用户,从中查找他们的个人资料,然后更新此个人资料上的状态。
ETC
这应确保访问页面的用户是他们所说的人 - 因为没有从客户端传递用户ID或其他识别信息。但是,在每个动作中获取用户似乎是错误的,我还没有看到许多代码执行此操作的示例。我应该使用过滤器拦截请求还是其他一些流程/做法?
答案 0 :(得分:4)
springSecurityService.currentUser
存在。您每次需要检索当前用户的原因是因为控制器操作是无状态的。是的,有一个会话正在维持一些状态,但我的意思是没有状态从一个控制器动作直接转移到另一个控制器动作。因此,实际上最佳做法是每次都获得当前用户。
客户端向Grails提供了一个cookie,通常名为JSESSIONID。 Grails然后使用它来恢复任何会话数据,这实际上导致springSecurityService.currentUser
能够提供当前用户。因此,虽然客户端没有传递用户ID,但它确实传递了会话ID,间接是识别信息。