【发布时间】:2014-10-28 00:21:49
【问题描述】:
在之前的应用程序中,我们能够从控制器访问session.user.PROPERTY,我们使用注解来保证安全性。在一个新的应用程序中,我们决定使用RequestMap 来存储规则。在控制器中检查用户域类的值时,我们得到一个 NullPointerException 错误,指出 session.user 是一个空对象。
在之前的应用程序中,访问session.user.WHATEVER 并直接从会话中访问用户信息很方便,而无需使用principal.id 查询用户信息。
【问题讨论】:
-
但在某个地方,
e.g. in filters必须做String userName = springSecurityService?.principal?.username或session.user = springSecurityService?.principal对 -
像这样将用户存储在会话中是一个非常糟糕的主意。该插件旨在方便访问用户信息,而无需像这样的黑客攻击。摆脱使用不应该存在的垃圾来污染会话的习惯 - 如果您最终确实拥有大量流量,您会很高兴您将会话保持在较小的范围内。尽可能使用 Spring Security
principal,并且您始终可以创建自定义UserDetailsService以向principal添加额外数据(例如姓名、电话号码等),因为GrailsUser实例(或您的子类)是principal -
@BurtBeckwith 是否有根据您的建议如何做到这一点的示例?
-
它在文档中有自己的章节。