Grails 确保用户是他们所说的人的实践(spring 安全)
Grails practises for ensuring that a user is who they say they are (spring security)
我正在使用 spring 安全插件,因此能够使用方法 springSecurityService.currentUser 来访问当前登录的用户。但是,我假设在每个控制器操作中获取当前用户然后根据返回的用户执行操作不是推荐的最佳实践。
示例:
登录用户点击 link 到他们的个人资料页面 - 控制器获取当前用户和 returns 数据来填充该用户的个人资料页面。
登录用户更改个人资料页面上的状态 - 控制器获取当前用户,从中找到他们的个人资料,然后更新此个人资料上的状态。
等
这应该确保访问页面的用户是他们所说的人 - 因为没有传递用户 ID 或来自客户端的其他识别信息。但是,在每个操作中获取用户似乎是错误的,而且我还没有看到很多这样做的代码示例。我应该使用过滤器来拦截请求还是其他一些 flow/practise?
springSecurityService.currentUser
就是为了这个目的而存在的。每次都需要检索当前用户的原因是因为控制器操作是无状态的。是的,有一个保持某种状态的会话在起作用,但我的意思是,状态不会从一个控制器动作直接转移到另一个控制器动作。所以,实际上每次都获取当前用户是最佳实践。
客户端会向 Grails 提供一个通常名为 JSESSIONID 的 cookie。 Grails 然后使用它来恢复任何会话数据,这实质上导致 springSecurityService.currentUser
能够提供当前用户。因此,虽然客户端不传递用户 ID,但它确实传递了一个会话 ID,它间接地是 身份信息。
我正在使用 spring 安全插件,因此能够使用方法 springSecurityService.currentUser 来访问当前登录的用户。但是,我假设在每个控制器操作中获取当前用户然后根据返回的用户执行操作不是推荐的最佳实践。
示例:
登录用户点击 link 到他们的个人资料页面 - 控制器获取当前用户和 returns 数据来填充该用户的个人资料页面。
登录用户更改个人资料页面上的状态 - 控制器获取当前用户,从中找到他们的个人资料,然后更新此个人资料上的状态。
等
这应该确保访问页面的用户是他们所说的人 - 因为没有传递用户 ID 或来自客户端的其他识别信息。但是,在每个操作中获取用户似乎是错误的,而且我还没有看到很多这样做的代码示例。我应该使用过滤器来拦截请求还是其他一些 flow/practise?
springSecurityService.currentUser
就是为了这个目的而存在的。每次都需要检索当前用户的原因是因为控制器操作是无状态的。是的,有一个保持某种状态的会话在起作用,但我的意思是,状态不会从一个控制器动作直接转移到另一个控制器动作。所以,实际上每次都获取当前用户是最佳实践。
客户端会向 Grails 提供一个通常名为 JSESSIONID 的 cookie。 Grails 然后使用它来恢复任何会话数据,这实质上导致 springSecurityService.currentUser
能够提供当前用户。因此,虽然客户端不传递用户 ID,但它确实传递了一个会话 ID,它间接地是 身份信息。