Grails Spring Security必填字段

时间:2011-09-19 11:20:05

标签: grails spring-security

根据spring-security-core documentation,User类中唯一需要的字段是

String username
String password
boolean enabled

但是,在使用正确的用户名和密码登录后,我收到以下错误:

  

groovy.lang.MissingPropertyException:没有这样的属性:accountExpired   对于类:doit.recruiter.User

这让我觉得 accountExpired accountLocked passwordExpired 实际上是必需的。如何使我的用户域类仅使用用户名/密码/启用?

1 个答案:

答案 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

解决这个问题的方法是实现自己的UserDetailsS​​ervice并简单地将值设置为false硬编码。或者,只需将字段作为域类中的瞬态属性,并使用返回false的getter。

自定义用户详细信息配方可在此处找到: http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/guide/11%20Custom%20UserDetailsService.html