根据spring-security-core documentation,User类中唯一需要的字段是
String username
String password
boolean enabled
但是,在使用正确的用户名和密码登录后,我收到以下错误:
groovy.lang.MissingPropertyException:没有这样的属性:accountExpired 对于类:doit.recruiter.User
这让我觉得 accountExpired , accountLocked 和 passwordExpired 实际上是必需的。如何使我的用户域类仅使用用户名/密码/启用?
答案 0 :(得分:2)
是的,这有点误导。该插件的默认实现在spring security中使用了用户界面的实现类User周围的grails包装器。这个接口需要你不想拥有的三个字段,因此整个插件也实现了这个。
您失败的代码可以在默认的用户详细信息实现中找到:
boolean enabled = enabledPropertyName ? user."$enabledPropertyName" : true
boolean accountExpired = accountExpiredPropertyName ? user."$accountExpiredPropertyName" : false
boolean accountLocked = accountLockedPropertyName ? user."$accountLockedPropertyName" : false
boolean passwordExpired = passwordExpiredPropertyName ? user."$passwordExpiredPropertyName" : false
解决这个问题的方法是实现自己的UserDetailsService并简单地将值设置为false硬编码。或者,只需将字段作为域类中的瞬态属性,并使用返回false的getter。
自定义用户详细信息配方可在此处找到: http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/guide/11%20Custom%20UserDetailsService.html