Grails Spring安全必填字段

Grails Spring安全必填字段,grails,spring-security,Grails,Spring Security,根据需要,用户类中唯一需要的字段是 String username String password boolean enabled 但是,在使用正确的用户名和密码登录后,我出现以下错误: groovy.lang.MissingPropertyException:没有此类属性:accountExpired 对于类:doit.recruiter.User 这让我觉得accountExpired、accountLocked和passwordExpired实际上是必需的。如何使我的用户域类仅在用户名/

根据需要,用户类中唯一需要的字段是

String username
String password
boolean enabled
但是,在使用正确的用户名和密码登录后,我出现以下错误:

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


这让我觉得accountExpired、accountLocked和passwordExpired实际上是必需的。如何使我的用户域类仅在用户名/密码/启用的情况下工作?

是的,这有点误导。该插件的默认实现在SpringSecurity中的用户界面实现类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

可在此处找到自定义用户详细信息:
是的,这有点误导。该插件的默认实现在SpringSecurity中的用户界面实现类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

可在此处找到自定义用户详细信息: