Grails 常见问题解答说:
问:如何从src/groovy中的源访问域类?
有时,您正在开发一些生活在src/groovy中的实用程序类,您打算在服务和其他工件中使用它们.但是,由于这些类是由Grails预编译的,因此无法实例化它们并编写类似Book.findByTitle("Groovy in> Action")的内容.但幸运的是,有一种解决方法,因为它可以这样做:
import org.codehaus.groovy.grails.commons.ApplicationHolder
// ...
def book = ApplicationHolder.application.getClassForName("library.Book").findByTitle("Groovy in Action")
应用程序必须在动态Gorm方法正常运行之前完成自举.
但是,似乎我可以直接导入域对象并在我的src/groovy类中使用GORM方法而没有任何问题,例如:
Book.findByTitle("Groovy in Action")
Run Code Online (Sandbox Code Playgroud)
由于不推荐使用ApplicationHolder,这个建议必须过时,但是仍然有理由避免直接从src/groovy使用域类吗?
我有一个grails应用程序,它使用spring-security-core和spring-security-ldap,并对Active Directory进行身份验证.我有一个习惯UserDetails和UserDetailsContextMapper.
我有一个用例,用户可以暂时承担单个会话的额外职责.我希望能够将角色分配给用户后,当会话过期时,他们已经在(即中期会议)已经登录,然后删除该角色.
我有一个user_role数据库表,用于存储用户和角色之间的关系.在这种情况下,关系是否添加到数据库然后在会话到期时被删除,或者仅仅存在于内存中并不重要.无论哪种方式,我正在寻找一种方法来在用户登录后的某个时刻分配角色(并立即应用).这可能吗?