我创建了一个过滤器类并在那里添加了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 ->
}
}
}
}
答案 0 :(得分:0)
根据这个JIRA ticket,众所周知这个问题根本没有得到解决。
response方法将呈现提交响应的JSON。此时添加标题为时已晚。标题需要添加到'之前'阻止或在行动中。将索引操作更改为
作为替代解决方案,您可以使用BeforeIntercepter并将标头应用于控制器中的所有操作。
相关答案 1 :(得分:0)
简而言之,你做错了就是你已经设置了标题!处理完成后但在呈现视图之前调用after
块。这意味着在调用after
块时,标题已经设置(我不确定,但也可能被发送)!
解决方案是在处理任何内容之前设置标题!甚至在调用控制器之前调用before
块,处理从那里开始!因此,这将是一个在那里设置标题的理想场所!!!