Grails 2.4.0过滤器

时间:2014-06-24 12:50:53

标签: grails

我创建了一个过滤器类并在那里添加了CORS头。重新启动的应用程序(也试过干净,编译..甚至重启eclipse)但我的REST控制器没有在响应中设置这些标头。关于如何调试的任何指针?可能是我做错了但是从doc看起来就像我需要做的就是在Grails中添加过滤器(filters

class AddcorsheadersFilters {

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

            }
            after = { Map model ->
                response.setHeader('Access-Control-Allow-Origin', '*')
                response.setHeader('Access-Control-Allow-Methods', 'POST, PUT, GET, OPTIONS, PATCH')
                response.setHeader('Access-Control-Allow-Headers', 'X-Additional-Headers-Example')
                response.setHeader('Access-Control-Allow-Credentials', 'true')
                response.setHeader('Access-Control-Max-Age', '1728000')

            }
            afterView = { Exception e ->

            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

根据这个JIRA ticket,众所周知这个问题根本没有得到解决。

  

response方法将呈现提交响应的JSON。此时添加标题为时已晚。标题需要添加到'之前'阻止或在行动中。将索引操作更改为

作为替代解决方案,您可以使用BeforeIntercepter并将标头应用于控制器中的所有操作。

该票证很可能与Grails doesn't add headers for json

相关

答案 1 :(得分:0)

简而言之,你做错了就是你已经设置了标题!处理完成后但在呈现视图之前调用after块。这意味着在调用after块时,标题已经设置(我不确定,但也可能被发送)!

解决方案是在处理任何内容之前设置标题!甚至在调用控制器之前调用before块,处理从那里开始!因此,这将是一个在那里设置标题的理想场所!!!