Grails从域验证器获取会话变量

Grails从域验证器获取会话变量,grails,grails-domain-class,grails-validation,Grails,Grails Domain Class,Grails Validation,我确信这是一种常见的情况,但我还没有找到任何答案。我有一个会话范围的变量,它保存当前登录的用户,我需要通过域对象中的自定义验证器执行条件验证。在验证程序中,是否有一种方法可以从会话范围中获取当前用户的错误信息,或者是否有另一种方法可以做到这一点,请记住,我希望能够从验证程序中返回特定字段的错误信息(例如,if(isBlank(it))return['blank','summary',Presentation];) 基本结构: class MyDomain { String aPrope

我确信这是一种常见的情况,但我还没有找到任何答案。我有一个会话范围的变量,它保存当前登录的用户,我需要通过域对象中的自定义验证器执行条件验证。在验证程序中,是否有一种方法可以从会话范围中获取当前用户的错误信息,或者是否有另一种方法可以做到这一点,请记住,我希望能够从验证程序中返回特定字段的错误信息(例如,
if(isBlank(it))return['blank','summary',Presentation];

基本结构:

class MyDomain 
{
    String aProperty;
    static constraints =
    {
        aProperty(validator:{
        if(isAdmin())return true;
        if(isBlank(it))return ['blank','summary',Presentation];
        })
    }
}

请参阅此帖子:

您到底想验证什么?在域中使用会话不是很典型;你通常会希望在一个服务中,或者在更高层的地方这样做。域通常不应该关心容器会话发生了什么。它只是一个标准的域类,其属性对管理员的验证要求不如普通用户严格。我添加了一个示例,说明了我要做的事情,问题是如何实现isAdmin函数。明白了。一个有趣的用例。我还没有编写任何与当前登录用户一起更改的验证。我得考虑一下。你在使用spring security core吗?添加一个服务看起来值得一试。最终,服务必须能够通过调用跟踪以某种方式获取会话的上下文,尽管我不确定如果没有会话范围,它是否能够做到这一点。尽管如此,它还是值得进一步研究。您也可以直接使用
RequestContextHolder.currentRequestAttributes()访问它。会话将它连接起来,它确实可以工作。虽然必须使用大量的试捕,但也可以。谢谢