Java 防止grails中的CSRF攻击?

Java 防止grails中的CSRF攻击?,java,grails,csrf,response-headers,Java,Grails,Csrf,Response Headers,我致力于Grails2.2.1。我已经通过了许多与CSRF相关的链接,以便在我的项目中实施 以上是我浏览过的许多链接中的几个 现在,回到我的问题。我不想使用“withform”或“.invalidtoken” 我想使用已经存在的RequestHeaderFilter.groovy文件。我想使用请求标头来验证源标头 请在下面找到代码片段 class ResponseHeaderFilters { def filters = { all(controller: '*',

我致力于Grails2.2.1。我已经通过了许多与CSRF相关的链接,以便在我的项目中实施

以上是我浏览过的许多链接中的几个

现在,回到我的问题。我不想使用“withform”或“.invalidtoken”

我想使用已经存在的RequestHeaderFilter.groovy文件。我想使用请求标头来验证源标头

请在下面找到代码片段

class ResponseHeaderFilters {
    def filters = {
        all(controller: '*', action: '*') {
            before = {

                def serverURL = grailsApplication.config.grails.serverURL ?: "http://localhost"
                //this could/should be improved upon if serverURL is not set in one of our config files
                //def OriginPrefix = serverURL.replace("http", "https")
                def requestOrigin = request.getHeader('Origin')

                if (request.getHeader('X-Requested-With')?.equals('XMLHttpRequest')) {

                    if (requestOrigin && requestOrigin == serverURL) {
                        response.setHeader('Expires', '-1')
                        response.setHeader('Cache-Control', 'no-cache')
                        response.addHeader('Cache-Control', 'no-store')
                        response.setHeader('X-UA-Compatible', 'IE=edge')
                    } else {
                        return false
                    }

                }
            }
        }
        addNoCachingHeaders(uri: '/**') {
            after = {
                response.setHeader('Expires', '-1')
                response.addHeader('Cache-Control', 'no-cache')
                response.addHeader('Cache-Control', 'no-store')
                response.setHeader('X-UA-Compatible', 'IE=edge')
            }
        }
    }
}
这段代码没有按预期工作。当我点击任何东西时,UI中的页面将变为空白。 上次我检查“原点”是空的。
有人能帮我解决这个问题吗?

在Grails3.x中,您需要使用拦截器而不是过滤器,但功能是相同的

class ResponseHeaderInterceptor {

    boolean before() { true }

    boolean after() { true }

    void afterView() {
        // no-op
    }
}

我将把实现留给您,但请参阅文档以了解更多信息:

True。我的坏朋友。:)